MongoDB查询中的顺序查询有时工作不正常

MongoDB查询中的顺序查询有时工作不正常,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在按顺序执行2个更新查询。我正在使用生成器函数和yield来处理javascript的异步行为 var result = yield db.tasks.update({ "_id": task._id, "taskLog":{$elemMatch:{"currentApproverRole": vcurrentApproverRole, "currentApprover":

我正在按顺序执行2个更新查询。我正在使用生成器函数yield来处理javascript的异步行为

var result = yield db.tasks.update({
                    "_id": task._id,
                    "taskLog":{$elemMatch:{"currentApproverRole": vcurrentApproverRole,
                    "currentApprover": new RegExp(employeeCode, 'i')}}
                }, {
                    $set: {
                        "taskPendingAt": vnextApproverEmpCode,
                        "status": vactionTaken,
                        "lastUpdated": vactionTakenTime,
                        "lastUpdatedBy": employeeCode,
                        "shortPin":shortPin,
                        "workFlowDetails":task.workFlowDetails,
                        "taskLog.$.reason": reason,
                        "taskLog.$.actionTakenBy": employeeCode,
                        "taskLog.$.actionTakenByName": loggedInUser.firstName+" "+loggedInUser.lastName,
                        "taskLog.$.actionTaken": vactionTaken,
                        "taskLog.$.actionTakenTime": vactionTakenTime
                    }
                });
                var vstatus = vactionTaken;

       // Below is the query that is not working properly sometimes

                yield db.groupPicnic.update({"gppTaskId": task.workFlowDetails.gppTaskId, "probableParticipantList.employeeCode": task.createdBy}, 
                    {
                        $set: {
                            'probableParticipantList.$.applicationStatus': vactionTaken
                        }
                    })

第二次更新操作有时不执行(10次中有9次有效)。我似乎不知道如何处理这个问题?

ES6生成器应该提供一种编写迭代器的简单方法

迭代器只是一个值序列——就像一个数组,但它是动态使用的,并且是惰性生成的

目前,您的代码执行以下操作:

let imAnUnresolvedPromise = co().next();
 // exiting app, promise might not resolve in time
通过前进,而不是等待承诺(假设你的应用程序关闭),你不能保证它会及时执行,因此为什么你会体验到不稳定的行为

你所要改变的就是等待承诺的解决

let resolveThis = await co().next();
编辑:

如果没有
async
/
await
语法,则必须使用嵌套回调来保证正确的顺序,如下所示:

co().next().then((promiseResolved) => {
     co().next().then((promiseTwoResolved) => {
         console.log("I'm done")
     })
});

ES6生成器应该提供一种编写迭代器的简单方法

迭代器只是一个值序列——就像一个数组,但它是动态使用的,并且是惰性生成的

目前,您的代码执行以下操作:

let imAnUnresolvedPromise = co().next();
 // exiting app, promise might not resolve in time
通过前进,而不是等待承诺(假设你的应用程序关闭),你不能保证它会及时执行,因此为什么你会体验到不稳定的行为

你所要改变的就是等待承诺的解决

let resolveThis = await co().next();
编辑:

如果没有
async
/
await
语法,则必须使用嵌套回调来保证正确的顺序,如下所示:

co().next().then((promiseResolved) => {
     co().next().then((promiseTwoResolved) => {
         console.log("I'm done")
     })
});

你在承诺,你在等待它的解决吗?您可以发布生成器调用吗?我认为yield本身应该保持执行直到查询执行完成并返回promise。不管怎样,我使用它就像是
co(function*(){querys…})
你在承诺,你在等待它的解决吗?您可以发布生成器调用吗?我认为yield本身应该保持执行直到查询执行完成并返回promise。无论如何,我使用它就像
co(function*(){querys…})
不确定如何在生成器函数中使用wait
wait
不在生成器中,而是基于它产生的承诺。您也可以在生成器中
wait
,但这不会提供您想要的行为。我尝试在更新查询中使用回调,但甚至没有执行更新操作。我的环境依赖性导致我无法使用所有ES6功能,如async&Wait。我在我的帖子中添加了回调语法。不确定如何在生成器函数中使用wait
wait
不是在生成器中,而是在它产生的承诺上。您也可以在生成器中
wait
,但这不会提供您想要的行为。我尝试在更新查询中使用回调,但甚至没有执行更新操作。我的环境依赖性导致我无法使用所有ES6功能,如async&Wait。有没有一种方法可以通过使用yield only来实现这一点我在我的帖子中添加了回调语法。