请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

搜索后点击取消的疑问

老师,这节课的点击取消不返回数据有点疑问

https://img1.sycdn.imooc.com//szimg/5b851be2000192dc14760912.jpg

this.cancelable = makeCancleable(fetch(this.getFetchUrl(this.inputKey)))在获得这个方法实例的时候,我还没点击取消,假设resolve(val)异步操作已经返回结果,代码执行到这里

https://img1.sycdn.imooc.com//szimg/5b851ccf0001d32a21281030.jpg

.then()操作也是异步的吧,此时拿到了resolve(val)的返回数据正在异步处理但是界面还没加载出项目,我点击了取消,这个时候数据已经拿到了啊,我再调用this.cancelable.cancel()修改hasCanceled_应该是没用的啊,还是会显示搜索的项目出来?因为在我点击取消之前数据已经返回了,只是在异步处理界面没有加载出来。假如我点击取消程序还运行在这里才是有用的吧

https://img1.sycdn.imooc.com//szimg/5b851ec10001e95016540080.jpg就是还没有使用hasCanceled_标志位判断是否返回数据,就是下面这一步还没执行到

https://img1.sycdn.imooc.com//szimg/5b851f2500018fc816400592.jpg不知道理解的对不对,有点蒙圈了,希望老师细致的讲解一下

正在回答 回答被采纳积分+3

1回答

CrazyCodeBoy 2018-08-29 09:50:33

fetch发出去的请求就像放进水里的鱼是,请求时无法取消的,只有等请求回来,决定处不处理这次请求所返回的结果,cancelable的设计就是解决这一问题的。

0 回复 有任何疑惑可以回复我~
  • 提问者 Leonard_ #1
    就是说已经resolve(val)返回数据了,外面.then()还在处理解析数据,界面没有渲染,我此时点了取消不就没用嘛,因为数据已经返回了,hasCanceled_这个是判断是否返回数据,外面可以.then()拿到,还是.catch()不处理,因为外面拿到数据后对数据处理也是异步的啊,处理过程我点了取消应该没用才对
    回复 有任何疑惑可以回复我~ 2018-08-29 10:00:45
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信