no-return-await

禁止不必要的 return await

async function 中使用 return await 将当前函数保留在调用堆栈中,直到正在等待的 Promise 已解决,代价是在解决外部 Promise 之前执行额外的微任务。return await 也可以用在 try/catch 语句中,以从另一个返回 Promise 的函数中捕获错误。

您可以通过不等待返回值来避免额外的微任务,如果与返回的 Promise 异步抛出错误,则函数的权衡不再是堆栈跟踪的一部分。这会使调试更加困难。

规则详情

此规则旨在防止由于对 async function 的语义缺乏理解而可能导致的常见性能危害。

此规则的错误代码示例:

/*eslint no-return-await: "error"*/

async function foo() {
    return await bar();
}

AoqXtTV6Q8irP1mRQNh34rATVScSSkZAU175f14ev6145njeerHH1txMZ4OQcdup

/*eslint no-return-await: "error"*/

async function foo() {
    return bar();
}

async function foo() {
    await bar();
    return;
}

// This is essentially the same as `return await bar();`, but the rule checks only `await` in `return` statements
async function foo() {
    const x = await bar();
    return x;
}

// In this example the `await` is necessary to be able to catch errors thrown from `bar()`
async function foo() {
    try {
        return await bar();
    } catch (error) {}
}

何时不使用

JJpAFanTauOoRuYj5kbpoHLzXA71cKGuo5LdBxfU8gL1w/CpPksXYxmxH1ciF631q7D2cgdfJ95r7Y27GywCTw==

    8D+vIVuMEj51HsIQFL9n9hssYN7IlFOQk5M2fQexeQla6o9xwwYo4gB9RJ0o6h3HeL5Rjd+uQFD+iuZNW5eK7OlKeLk7MbKk4LjPMUuymxJBwXgA75fVXqAdL1WoY7fq4rxGaieSR0PTxL+RcGrl/+FwqGzO06ThlAh5qN24214TGDHh/bFhq56flW7FiY12rXH6M5l5MtmsHyBGiELhAPMAYWvkaMYkV9A78ywNnORl4qKrvHt97uR6BMtWU4JqpJsYzFOM51YexIhg5nVbXtLmyM0VY0drRLMdSvxiqjQhiYGg91ONXP2tfp+vtBTm