【问题标题】:Chaining .then without dependency of previous results链接 .then 而不依赖先前的结果
【发布时间】:2019-03-22 01:15:11
【问题描述】:

我使用的是节点版本 6,并且我已经链接了几个 .then 的。但是,只有第二个 .then 取决于先前的结果,但其余的 .then 不依赖于先前的结果。当它们不依赖于先前的结果时,如何链接 .then。

这是我的代码:

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。

请指导

【问题讨论】:

  • 不依赖于以前的结果”是什么意思?你不想等待前面的结果,然后同时运行所有的东西吗?
  • 顺便说一句,节点 6 是下个月 EOL。
  • "很少有人说我在滥用承诺。" - 谁说的,在哪里说的,他们到底说了什么,他们有没有给出理由?你有链接,报价吗?
  • @DazzilePro 啊,谢谢。好吧,他们完全错了。你的代码很好(虽然有点奇怪)。

标签: javascript promise


【解决方案1】:

也许一个好主意是利用 Promise.all 函数,根据Node green 它在节点 6 中可用。

在这种情况下,只有第二个 Promise 依赖于第一个 Promise,所以一种方法是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多