我正在使用节点版本6,并且已经链接了数个.then。但是,仅第二个.then取决于先前的结果,但是其余的.thens不取决于先前的结果。当它们不依赖于以前的结果时,如何链接。
这是我的代码:
return admin.auth().getUser(phone)
.then(userRecord => {
return rp(options)
})
.then((orderResponse) => {
return admin.database().ref('trans/'+ phone)
.push({ amount: orderResponse.amount })
})
.then(() => {
return admin.database().ref('ord/'+ phone)
.push({ payment_id })
})
.then(() => {
return saveThisAddress === true ?
admin.database().ref('add/'+phone)
.push({address: finalAddress}) : null
})
.then(() => {
return admin.database().ref('dStatus/'+phone+'/'+orderNumber)
.set({ plan: planName === "" ? "Single Day Plan" : planName, orderStatus: orderStatus,
}, () => {
res.status(200).send({ success:true })
})
})
.then(() => {
return admin.database().ref(`couponCodes/${couponCodeName}`)
.update({couponUsage: couponUsage + 1 })
})
.then(() => {
return admin.database().ref(`couponUsage/${phone}`)
.update({ [couponCodeName]: usersCouponUsage + 1 })
})
.catch((err) => {
res.status(422).send({error: err });
});
很少有人说,我滥用诺言。我究竟做错了什么 ?当每个.then不依赖于先前的结果时,如何处理多个.then?由于我正在使用节点6,因此此处无法使用async / await。
请指导
答案 0 :(得分:0)
也许一个好主意是利用Promise.all函数,该函数根据Node green可以在节点6中使用。
在这种情况下,只有第二个承诺取决于第一个承诺,因此一种实现方式是:
var promise1 = ...
.then(function(param) { return /* your second promise */})
var promise3 = ...;
var promise4 = ...;
var promise5 = ...;
var promise6 = ...;
Promise.all(promise1, promise3, promise4, promise5, promise6)
.then(/* once all succeded */)
.catch(/* if an error occurred */)