我在NodeJS中使用蓝鸟。我想做一个嵌套循环。像这样:
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array.length; j++) {
if (i !== j) {
// do some stuff
}
}
}
我如何用蓝鸟宣传这个循环?
我在这里看到一些类似的问题 Science Fiction & Fantasy Stack Exchange 或者在这里 How to use promise bluebird in nested for loop?
但这并不能澄清我的怀疑。除了代码之外,我想要一些解释,因为我真的不明白我在做什么。
提前致谢!
答案 0 :(得分:4)
当然,你正在使用Node,你有协同程序,使用它们:
function myWork = Promise.coroutine(function*() {
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array.length; j++) {
if (i !== j) {
// do some stuff
// this can be async calls, for example
yield thisReturnsAPromise(i, j); // call some async function
}
}
}
});
要处理错误,您可以使用常规try/catch
。要调用它,您执行doWork()
并返回一个可以then
或catch
的承诺。
问题是,在ES2015和生成器之前,您有issues with returning async values并使用常规流控制结构。在旧的Node中,您必须在嵌套在Promise.each
中的数组上使用Promise.each
并返回内部承诺:
Promise.each(array, function(i) {
return Promise.each(array, function(j) {
return thisReturnAPromise(i, j);
});
});
协同程序简化了此操作,并yield
将控制权交给了承诺泵。