Node.js NodeJS嵌套承诺无法正常工作
我的代码有问题。它跳转到第二个Node.js NodeJS嵌套承诺无法正常工作,node.js,mongodb,promise,Node.js,Mongodb,Promise,我的代码有问题。它跳转到第二个。然后在没有完成第一个作业的情况下跳转到部分。之后,它返回到第一个承诺,但从不在第二个承诺中执行代码 Promise.all(jobs).then((values) => { console.log("First!") values.forEach(function(vals) { vals.forEach(function(doc) { if (doc.properties.location_i.toS
。然后在没有完成第一个作业的情况下跳转到部分。之后,它返回到第一个承诺,但从不在第二个承诺中执行代码
Promise.all(jobs).then((values) => {
console.log("First!")
values.forEach(function(vals) {
vals.forEach(function(doc) {
if (doc.properties.location_i.toString() == request.body.id) {
jobs_do.push(dbo.collection("zones").find({
"geometry": {
$geoIntersects: {
$geometry: {
type: "Point",
coordinates: [
docs[values.indexOf(vals)].geometry_do.coordinates[0],
docs[values.indexOf(vals)].geometry_do.coordinates[1]
]
}
}
}
}))
}
})
})
}).then(function() {
console.log("Second!")
Promise.all(jobs_do).then((values) => {
values.forEach(function(vals) {
vals.forEach(function(doc) {
console.log(doc.properties.objectid);
});
})
});
});
它实现jobs\u do
数组,但Promise.all(jobs\u do)。然后((value))
在jobs\u do
为空时执行一次
控制台日志为:
First!
Second!
虽然我不能完全复制上面的设置,但这里有一个简单的示例,可以指导您如何重新编写代码,使其按预期工作
const jobs=Array.from({length:2})
.map((x,idx)=>{
还愿({
id:idx+1,
标题:`作业${idx+1}`
})
})
const jobs_do=[];
承诺。所有(工作)
。然后(值=>{
console.log(“第一个!”);
for(值的常量值){
如果(真){
工作推(
承诺,决心({
价值
description:`这是对作业${value.id}的描述`
})
);
}
}
回报承诺。所有(工作);
})
。然后(结果=>{
console.log(“第二个!”);
results.forEach(result=>{
log(`[${result.id}]${result.title}${result.description}`);
});
});那么你是说第二个中的作业是空的?