关于如何使用bluebird promises从for / while循环调用异步函数的问题似乎有很多答案,但是据我所知,所有这些都需要node.js才能工作(例如promise.method()或process)。 nextTick();例如:使用bluebird的while循环promises)。有什么办法可以在普通的js + blue bird中做到这一点?谢谢你的时间。
好吧,一旦某个东西成为了一个诺言返回函数-您实际上并不在乎库为您照顾的环境:
Promise.delay(1000); // an example of an asynchronous function
见这个问题上的转换功能,以保证返回的。
现在,一旦有了这种功能,循环就变得很简单了:
function whileLoop(condition, fn){
return Promise.try(function loop(val){
return Promise.resolve(condition()).then(function(res){
if(!res) return val; // done
return fn().then(loop); // keep on looping
});
});
}
这会让您执行以下操作:
var i = 0;
whileLoop(function(){
return i < 10; // can also return a promise for async here
}, function body(){
console.log("In loop body");
i++;
return Promise.delay(1000);
}).then(function(){
console.log("All done!");
});
为了演示在浏览器中的工作原理,这是一个JSFiddle
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句