如何完成如何使用Node.js和MongoDB回调执行后,执行新的功能? [重复]

问题描述 投票:0回答:1

这个问题已经在这里有一个答案:

我需要整理如何使用Node.js和MongoDB回调执行后调用一些功能。我下面提供我的代码。

var updateArr=[];
TempCollection.find({},function(err,docs){
    for(var i=0;i<docs.length;i++){
        if (docs[i]['login_id']=='' || docs[i]['login_id']==null) {
            var zon=docs[i]['zone']+'@oditeksolutions.com';                     
            TempCollection.findOneAndUpdate({$or:[{login_id:null},{login_id:''}]},{$set:{login_id:zon}},{new:true},function(err1,upd){
                    if(!err1){
                        updateArr.push(upd);

                    }
           })

       }
    }
    console.log('lrn::',updateArr.length);
    if (updateArr.length > 0) {
        createAllocation();
        createUser();
    }
})

在这里,我需要更新后两者功能(i.e-createAllocation and createUser)所有文件被调用。在此之前更新都被执行的所有文件。

node.js mongodb
1个回答
1
投票

findOneAndUpdate异步运行,因此当循环结束后,功能将不会做他们的工作呢。

我建议你使用async / await这样你就可以轻松地运行两个步骤同步(第一个数据库的更新,然后调用在年底的功能):

var updateArr=[];
TempCollection.find({}, async function(err, docs) {
    for(var i = 0; i < docs.length; i++) {
        if (docs[i]['login_id'] === '' || docs[i]['login_id'] == null) {
            var zon = docs[i]['zone'] + '@oditeksolutions.com'                     
            try {
                var upd = await TempCollection.findOneAndUpdate({ $or: [{ login_id: null }, { login_id: '' }]}, { $set: { login_id: zon }}, { new: true }).exec()
                updateArr.push(upd)
            } catch(err1) {
                console.log(err1) // throw err1
            }
        }
    }
    console.log('lrn::',updateArr.length);
    if (updateArr.length > 0) {
        createAllocation();
        createUser();
    }
})
© www.soinside.com 2019 - 2024. All rights reserved.