gpt4 book ai didi

javascript - promise 的嵌套 while 循环

转载 作者:行者123 更新时间:2023-11-30 05:34:39 25 4
gpt4 key购买 nike

我已关注帖子Correct way to write loops for promise.成功地为 promise 创建循环。

不过,这个方法好像对嵌套循环不起作用

我要模拟的循环:

var c = 0;
while(c < 6) {
console.log(c);
var d = 100;
while(d > 95) {
console.log(d);
d--;
}
c++;
}

Promised (注意,我在这里简化了 promFunc() 的逻辑,所以不要认为它没用):

var Promise = require('bluebird');
var promiseWhile = Promise.method(function(condition, action) {
if (!condition()) return;
return action().then(promiseWhile.bind(null, condition, action));
});

var promFunc = function() {
return new Promise(function(resolve, reject) {
resolve();
});
};

var c = 0;
promiseWhile(function() {
return c < 6;
}, function() {
return promFunc()
.then(function() {
console.log(c);

// nested
var d = 100;
promiseWhile(function() {
return d > 95;
}, function() {
return promFunc()
.then(function() {
console.log(d);
d--;
});
})// .then(function(){c++}); I put increment here as well but no dice...

c++;
});
}).then(function() {
console.log('done');
});

实际结果:

0
100
1
99
100
2
98
99
100
3
97
98
99
100
4
96
97
98
99
100
5
96
97
98
99
100
96
97
98
99
96
97
98
96
97
done
96

有什么解决办法吗?

最佳答案

promWhile 返回外循环需要等待的 promise 。您确实忘记了 return 它,这使得 then() 结果在外部 promFunc() 完成后立即解析。

… function loopbody() {
return promFunc()
.then(function() {
console.log(c);
c++; // move to top (or in the `then` as below)

return promiseWhile(
// ^^^^^^
… ) // .then(function(){c++});
});
} …

关于javascript - promise 的嵌套 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24682808/

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