【发布时间】:2018-05-11 10:14:31
【问题描述】:
我正在传递一组猫鼬承诺,由于某种原因,有时 customerFindPromise 返回 null,有时它返回请求的对象。我在这里做错了吗
******************** START result0: null result END ********************
******************** START result1: { _id: 5a18a637346826574416a588,
doc_fname: 'Bob',
doc_lname: 'Smith',
numOfCases: 1,
__v: 0 } result END ********************
******************** START result2: {"n":1,"ok":1} result END ********************
代码
var customer = {
doctor_id: 5a18a637346826574416a588,
cust_fname: 'dfsdf',
cust_lname: 'sdasd',
case_type: 'Crowns',
_id: 5a1cd19438f14164b0087753
}
test(customerCase);
async function test(customerCase) {
console.log("******************** customerCaseDelete: "+ customerCase._id +" ********************");
var _id = customerCase._id;
var doctor_id = customerCase.doctor_id;
var query = {_id:_id};
const customerFindPromise = CustomerCases.findById(_id);
const customerRemovePromise = CustomerCases.remove(query);
const doctorUpdatePromise = Doctors.findOneAndUpdate({_id:doctor_id},{'$inc': {'numOfCases': -1}},{new:true});
await Promise.all([customerFindPromise,doctorUpdatePromise,customerRemovePromise])
.then((result) => {
console.log("******************** START result0: "+ result[0] +" result END ********************");
console.log("******************** START result1: "+ result[1] +" result END ********************");
console.log("******************** START result2: "+ result[2] +" result END ********************");
res.json(result);
}).catch((err) => {
console.log("******************** START err: "+ err +" err END ********************");
throw err;
});
}
【问题讨论】:
-
您发布的代码无效,特别是
var customer的声明 -
同时查找和删除具有相同 id 的对象显然是典型的竞争条件。
标签: javascript node.js mongodb mongoose promise