對於如何使用藍鳥承諾從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. Node.js&Redis&For循環與藍鳥承諾?
- 2. 承諾循環(藍鳥) - 在異步包裝對象
- 3. node.js承諾用藍鳥的循環體系結構
- 4. 在Node.JS中使用藍鳥承諾
- 5. Node.js |藍鳥承諾不會異步執行任務
- 6. Django等效於Node.js的藍鳥承諾
- 7. 在node.js中承諾藍鳥的問題
- 8. 使用藍鳥承諾
- 9. Native承諾與藍鳥承諾
- 10. 鏈接的JavaScript承諾在一個循環 - 藍鳥
- 11. 藍鳥模式嘲笑異步代碼異步承諾
- 12. 藍鳥諾言循環
- 13. 與承諾異步循環?
- 14. 藍鳥承諾沒有然後
- 15. 循環通過任務瀑布 - 承諾藍鳥
- 16. 在while循環中的承諾javascript
- 17. 異步使用javascript承諾
- 18. 承諾與FS和藍鳥
- 19. 循環內的異步承諾
- 20. jQuery的異步循環延期(承諾)
- 21. javascript - 藍鳥未正確啓動承諾
- 22. 藍鳥承諾多級
- 23. 使用藍鳥.return()方法擴展藍鳥承諾解析值
- 24. 藍鳥承諾和域名
- 25. 藍鳥承諾和回調
- 26. 使用藍鳥承諾做N次
- 27. JavaScript承諾藍鳥跳過示例「then」
- 28. Javascript/Node.js異步循環
- 29. TypeScript覆蓋ES6承諾與藍鳥
- 30. 節點JS藍鳥嵌套循環承諾
節點是普通的js。 (另外,你的鏈接沒有節點引用) – Amit
對不起,但我沒有使用node.js - 你告訴我,.method()和process.nextTick()可用作node.js之外的js函數嗎? – user3306881
我不知道'promise.method()'是什麼,或者你看到了什麼。 (也不在鏈接中) – Amit