【问题标题】:javascript await in the caller and in the calleejavascript 在调用者和被调用者中等待
【发布时间】:2020-07-08 19:36:33
【问题描述】:

我有一个服务类叫做:Test

那个Test类有一个函数叫做:getMe()

getMe 函数中,我有 3 个等待语句,第二个需要第一个的答案,第三个需要第二个的答案。一个例子:

class Test {
   async getMe() {
      const res1 = await promise1;
      const res2 = await promise2(res1);
      const res3 = await promise3(res2);
      return res3;
   }
}

现在,在我的代码中,我调用了这个函数。

const a = new Test();
try{
  const res = await a.getMe();
}catch(err){
  console.log("error", err);
}

现在,由于在getMe 函数中,我已经在等待承诺,它没有优化,因为创建了一个中间承诺。阅读:Difference between `return await promise` and `return promise`

所以,我想知道,如果在getMe 函数中,我不应该写await 进行优化并直接返回promise,我的代码怎么写?我不想在我的外部代码中调用awaitpromise1、promise2、promise3,因为那样我就没有一个函数来处理最后的位并且我的代码会分散。

你有什么想法,可以给你什么建议?

【问题讨论】:

    标签: javascript node.js promise


    【解决方案1】:

    由于getMe() 中的promise 是相互依赖的(例如promise2 需要promise1 的解析值作为输入参数),你不能在这里真正优化某些东西(除了直接返回最后一个promise) .

    如果它们不依赖于其他,您当然可以使用Promise.all() 以非顺序处理它们,返回它的承诺并在调用函数中等待这个承诺。

    【讨论】:

      【解决方案2】:

      你唯一可以做的优化它,就是直接返回promise3的结果。

      class Test {
         async getMe() {
            const res1 = await promise1;
            const res2 = await promise2(res1);
            return promise3(res2);
         }
      }
      

      除此之外,我看不到任何方法,因为这三个功能相互依赖。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多