【发布时间】:2025-12-10 00:20:02
【问题描述】:
我一直在尝试循环遍历一组项目,以便每个项目都用于返回承诺的操作,但在该承诺中还有另一个承诺。我没有得到想要的流量。我究竟做错了什么?或者,还有更好的方法。由于条件,我不能使用太多的链接。我已经以多种方式尝试了 async/await 仍然是相同的不良结果。
为了清楚起见,代码已被简化。 fetch 调用实际上是数据库操作,但行为仍然相同;在这种情况下,我也使用了单元素数组。
var names = ['mike'];
console.log('black');
var fn = function doThings(name) {
return new Promise((resolve) => {
console.log('blue');
var char = name.substr(1);
getNum(char);
console.log('violet');
function getNum(ch) {
console.log('green');
fetch('fetchfrom.url')
.then(response => {
console.log('orange');
return response.json();
})
.then(n => {
if(n === 2) {
console.log('red1');
fetch('fetchfrom.url')
.then(response => {
console.log('yellow');
return response.json();
}).then(color => {
if(n === 2) {
console.log('red2');
resolve(5);
}
else {
console.log('brown2');
resolve(10);
}
});
console.log('lilac');
} else {
console.log('brown1');
resolve(20);
}
});
}
})
}
var actions = names.map(fn);
Promise.all([actions])
.then(() => {
console.log('done');
})
我希望日志按顺序排列(假设 n 始终等于 2): 黑色...蓝色...绿色...橙色...红色1...黄色...红色2...淡紫色...紫色...完成
但相反,我一直得到: 黑色...蓝色...绿色...紫色...完成...橙色...红色1...黄色...红色2...淡紫色
【问题讨论】:
标签: javascript node.js es6-promise