搜索后点击取消的疑问

来源:9-8 为Promise插上翅膀之可取消的异步任务

Leonard_

2018-08-28

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

http://img.mukewang.com/szimg/5b851be2000192dc14760912.jpg

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

http://img.mukewang.com/szimg/5b851ccf0001d32a21281030.jpg

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

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

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

写回答

1回答

CrazyCodeBoy

2018-08-29

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

0
1
Leonard_
就是说已经resolve(val)返回数据了,外面.then()还在处理解析数据,界面没有渲染,我此时点了取消不就没用嘛,因为数据已经返回了,hasCanceled_这个是判断是否返回数据,外面可以.then()拿到,还是.catch()不处理,因为外面拿到数据后对数据处理也是异步的啊,处理过程我点了取消应该没用才对
2018-08-29
共1条回复

React Native技术精讲与高质量上线App开发

一个真实的上线项目,一次完整的开发过程,全面掌握React Native技术

1577 学习 · 727 问题

查看课程