对于如何使用蓝鸟承诺从for/while循环调用异步函数的问题似乎有很多答案,但据我所见,都需要node.js才能工作(例如promise.method()或process.nextTick();例如:While loop using bluebird promises)。在普通的js + blue bird中有没有办法做到这一点?谢谢你的时间。普通的JavaScript +蓝鸟承诺异步的/ while循环没有使用NODE.JS
回答
那么,一旦事情是一个承诺返回函数 - 你真的不关心库负责的为您的环境:
Promise.delay(1000); // an example of an asynchronous function
见this question上转换功能,以保证返回的。
现在,一旦你有那种功能的循环变得非常简单:
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!");
});
为了证明这一点的工作在浏览器中 - 这里的a JSFiddle
非常感谢 - 我会试试这个 – user3306881
@ user3306881刚刚添加了一个jsfiddle,以便您可以在浏览器中试用它。 –
我得到Uncaught TypeError:Promise.try不是一个函数whileLoop @ promise loops v3.html:32initialize @ promise loops v3.html:17 - 任何想法? – user3306881
- 1. 承诺循环(蓝鸟) - 在异步包装对象
- 2. 使用蓝鸟承诺
- 3. 链接的JavaScript承诺在一个循环 - 蓝鸟
- 4. 蓝鸟模式嘲笑异步代码异步承诺
- 5. 蓝鸟诺言循环
- 6. 与承诺异步循环?
- 7. 蓝鸟承诺没有然后
- 8. 循环通过任务瀑布 - 承诺蓝鸟
- 9. 在while循环中的承诺javascript
- 10. 异步使用javascript承诺
- 11. jQuery的异步循环延期(承诺)
- 12. 循环内的异步承诺
- 13. 蓝鸟承诺多级
- 14. 蓝鸟承诺和回调
- 15. Javascript/Node.js异步循环
- 16. 节点JS蓝鸟嵌套循环承诺
- 17. 承诺在node.js循环
- 18. Express.js和蓝鸟 - 处理的承诺链
- 19. 返回的拒绝承诺和蓝鸟
- 20. 迭代与蓝鸟的承诺阵列
- 21. 异步/等待承诺麻烦 - Javascript/Nodejs
- 22. 在For循环使用蓝鸟承诺建立并返回对象
- 23. 蓝鸟和es6承诺打字稿
- 24. 使用.join在异步承诺中调用异步承诺
- 25. 蓝鸟承诺:捕获错误
- 26. 蓝鸟承诺每个返回结果
- 27. 蓝鸟承诺阻止自然
- 28. 蓝鸟承诺并抓分支
- 29. 蓝鸟承诺与事件发射器
- 30. 蓝鸟承诺重试DocumentDB请求
节点是普通的js。 (另外,你的链接没有节点引用) – Amit
对不起,但我没有使用node.js - 你告诉我,.method()和process.nextTick()可用作node.js之外的js函数吗? – user3306881
我不知道'promise.method()'是什么,或者你看到了什么。 (也不在链接中) – Amit