从unsyntactic可以看出来,这个报错其实是异步导致的。
使用jsonp请求的时候不知道它是异步的,于是我在for循环内发送jsonp请求。而我也在promise对象的then方法内写了continue,由于promise是异步的,触发break的时候循环可能已经执行完了,所以break与continue就不能用(在then方法中)了。
根据第一个请求结果决定发送第二个请求的场景,看来需要写到then方法里了。
说到js异步,我们来看一下async函数:
async function refresh(){ console.log(1); var reply = await getData(); console.log(2); return reply; } refresh().then(function(re){console.log(re)});
这段代码会先输出1,遇到await时等待getData()执行完后输出2,最后执行回调函数。
这么做有什么用呢?比如在等待getData完成的时候(通常网络请求耗时较长),该函数由于await交出了程序执行权,程序就不用等了,可以先执行下面的代码。
之所以能够这么顺利地交出执行权,是因为refresh()实际上在遇到await的时候先返回了一个promise对象,并且async函数自带执行器,待getData完成又能够继续执行函数。
async函数是属于es7的语法,但babel已经支持,实质上是对generator函数和自动执行器的包装。想了解更多可以访问下面的链接: