私はmongoose約束の配列を渡しています。何らかの理由でcustomerFindPromiseがnullを返すこともありますが、時には要求されたオブジェクトを返すこともあります。私はここで何か間違ったことをやっているnodejs Promise.allはいくつかのマングース約束で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を持つオブジェクトを同時に見つけて削除するのは、古典的な競合状態のようです。 – Bergi