Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS嵌套承诺无法正常工作_Node.js_Mongodb_Promise - Fatal编程技术网

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}`);
});

});中的
作业
是空的?