从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函数和自动执行器的包装。想了解更多可以访问下面的链接:

http://www.ruanyifeng.com/blog/2015/05/async.html