你所不知道的”return await“以及eslint规则”no-return-await“

974 阅读1分钟

先说结论

不好的

// 例子1
async function foo() {
    return await bar();
}

好的

// 例子2
async function foo() {
    return bar();
}
// 例子3
async function foo() {
    await bar();
    return;
}

// 例子4
async function foo() {
    const x = await bar();
    return x;
}

// 例子5
async function foo() {
    try {
        return await bar();
    } catch (error) {}
}

原因

await语句会保持当前函数的调用栈直到await后面的promiseresolved。而如果直接return,当前调用栈会马上出栈。不过请小心,这个时候try catch语法并不能捕获错误。

为了节省计算机开销,应该去掉await, 如例子2。

例子3和例子4将await与return错开了代码行,好处是可以在return处设置debugger断点,例子1在return处断点并不会等待后面的调用执行完。

此外,若想在当前函数使用try catch finally异常处理,应该使用await

eslint规则”no-return-await“

如果是例子1则报错,其他不报错。

参考:eslint.org/docs/rules/…

ps:需要内推请扫码喔

base: 上海

我们公司名为特赞,扫码看职位。 D轮独角兽创业公司,刚刚完成融资,前景光明,还在大量招人中ヾノ≧∀≦)o。

公司亮点: 保底13薪,每年普调,双休、1075弹性不打卡、macbook pro、硕士1年本科2年的落户政策、公司是设计型科技公司,妹子超多!大部分都是年轻人,非常有活力,工作氛围像大学,cxo无架子(没有独立办公室,和员工工位相同)。

IMG_3709.jpeg

image.png

image.png