javascript正在呼叫者和被呼叫者中等待

时间:2020-07-08 11:17:24

标签: javascript node.js promise

我有一个服务类,名为:Test

Test类具有一个名为:getMe()

的函数。

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

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,那我的代码怎么写?我不想在我的外部代码中调用await promise1,promise2,promise3,因为那样我就没有一个函数来处理最后的位,并且我的代码会分散。

您怎么看,可能是您的建议吗?

2 个答案:

答案 0 :(得分:2)

由于getMe()中的承诺彼此依赖(例如promise2需要将promise1的解析值作为输入参数),因此您无法在此处真正优化某些内容(除了直接返回最后的承诺)。

如果它们不依赖于其他对象,则可以肯定地使用Promise.all()以便对其进行非顺序处理,返回其诺言并在调用函数中等待该诺言。

答案 1 :(得分:1)

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

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

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