2

我有一个名为的服务类: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函数中,我已经在等待承诺,它没有优化,因为创建了一个中间承诺。阅读本文:`return await promise` 和 `return promise` 之间的区别

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

你有什么想法,可以作为你的建议吗?

4

2 回答 2

2

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

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

于 2020-07-08T11:23:13.120 回答
1

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

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

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

于 2020-07-08T11:35:40.187 回答