链接.then无需依赖先前的结果

时间:2019-03-17 13:45:45

标签: javascript promise

我正在使用节点版本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。

请指导

1 个答案:

答案 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 */)