我正在按顺序执行2个更新查询。我正在使用生成器功能和收益处理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
}
})
有时不执行第二次更新操作(十分之九的工作)。我似乎不知道如何处理此问题?
答案 0 :(得分:0)
ES6生成器应该提供一种编写迭代器的简单方法。
迭代器只是一个值序列-像数组一样,但是被动态消耗并且延迟生成。
当前,您的代码执行此操作:
let imAnUnresolvedPromise = co().next();
// exiting app, promise might not resolve in time
通过继续前进,而不是等待承诺(假设您的应用程序关闭),您不能保证它会及时执行,因此您为什么会遇到不稳定的行为。
您需要更改的就是等待诺言解决。
let resolveThis = await co().next();