2017-04-11 45 views
3

我看到有一个eslint rule, no-return-await, for disallowing return await“return await”是否存在性能问题?

在规则的描述中,它指出return await增加"extra time before the overarching Promise resolves or rejects"

但是,当我查看MDN async function docs时,“简单示例”显示了一个示例,其中包含return await,但没有说明为什么这可能是一个糟糕的想法/性能问题。

是否为return await Eslint文档提示的实际性能问题?

如果是这样,怎么样?

+0

据我所知,'return'和'return await'应该在功能上是等价的,所以我不明白为什么任何合理的解释器不应该首先优化它。尽管(至少[Babel没有]),我认为交易商不会这样做(https://babeljs.io/repl/#?babili=false&evaluate=false&lineWrap=false&presets=stage-2&targets=&browsers=&builtIns=false&code =异步%20function%20foo()%20%7B%0A%20%20return%20Promise.resolve(123)%3B%0A%7D%0A%0Aasync%20function%20巴()%20%7B%0A%20% 20返回%20await%20Promise.resolve(123)%3B%0A%7D))所以它可能会有一些差异。 – Frxstrem

+1

请参阅[return'await promise'和'return promise'之间的区别](https://stackoverflow.com/q/38708550/1048572) – Bergi

回答

12

不,没有任何表现问题。这只是一个不必要的额外操作。执行可能需要更长的时间,但应该不太明显。这与return x+0类似,而不是return x,整数为x。或者说,完全等同于the pointless .then(x => x)

它没有做实际的伤害,但我认为这是坏的风格和标志,笔者并不完全COMPRE ­ HEND承诺和async/await

然而,有一种情况它使一个重要的区别:

try { 
    … 
    return await …; 
} … 

await并扔在拒绝,并且在任何情况下都执行catchfinally处理程序之前等待承诺的分辨率。一个普通的return会忽略这一点。

相关问题