Plain JavaScript + bluebird承诺不使用NODE.JS的异步for/while循环
Plain JavaScript + bluebird promises asynchronous for/while loop WITHOUT USING NODE.JS
关于如何使用蓝鸟承诺从for/while循环调用异步函数的问题似乎有很多答案,但据我所知,所有问题都需要node.js来工作(例如promise.method()或process.nextTick();例如:使用蓝鸟承诺的While循环)。有没有办法做到这一点在平原js +蓝鸟?感谢您的宝贵时间。
好吧,一旦某个东西是承诺返回函数-你并不真正关心环境库会为你照顾它:
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相关文章:
- javascript函数中的异步与同步.(Node.js)
- Typeahead.js未显示异步结果
- $(window).load在带有异步js-libs的IE中触发得太快
- 初学者异步JS-我曾经使用过“;那么“;每次我都想要价值
- 如何从异步.js系列返回结果
- 异步.js中第 169 行和第 171 行之间的代码块是什么意思
- JavascriptKango:如何在非异步函数中获取异步JS函数的返回
- 如何优化异步.js API 调用
- 加载异步 JS 然后调用函数
- NodeJS:如何使用异步.js来处理数据库中的项目列表
- 缓存来自异步函数的结果,并将其传递给异步.js中的下一个函数
- 异步.js瀑布(在数组外部定义的函数)
- 重写异步JS进程(可能使用JQuery Promise)
- 异步.js - 正确的探测方法
- 如何将函数绑定到异步.js
- 异步.js浏览器示例不完整
- 使用GA等参数的异步JS调用
- 你需要知道的关于异步JS编程
- 使用异步JS绘制DIV
- “套接字”类型错误上缺少错误处理程序:任务不是函数 - 节点.js异步.js