gpt4 book ai didi

node.js - Node JS Bluebird 嵌套循环 promise

转载 作者:搜寻专家 更新时间:2023-10-31 23:41:27 24 4
gpt4 key购买 nike

我在 NodeJS 中使用 Bluebird 。我想做一个嵌套循环。像这样:

for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array.length; j++) {
if (i !== j) {
// do some stuff
}
}
}

我如何使用 bluebird 来 promise 这个循环?

我在这里看到一些类似的问题 How to use promise bluebird in nested for loop?或者在这里 in node.js, how to use bluebird promise with a for-loop

但这并不能澄清我的疑问。除了代码之外,我还想要一些解释,因为我不太明白我在做什么。

提前致谢!

最佳答案

当然,你正在使用 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() 并返回一个您可以 thencatch 的 promise 。

问题是,在 ES2015 和生成器之前,您有 issues with returning async values并将它们与常规流量控制结构一起使用。在旧 Node 中,您必须在 Promise.each 中嵌套的数组上使用 Promise.each 返回并返回其中的内部 promise :

Promise.each(array, function(i) {
return Promise.each(array, function(j) {
return thisReturnAPromise(i, j);
});
});

Coroutines 简化了这一点,并将 yield 控制权交还给负责处理此事的 promise pump。

关于node.js - Node JS Bluebird 嵌套循环 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36861014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com