【问题标题】:Safe to remove async when no await's are used?不使用等待时可以安全删除异步吗?
【发布时间】:2021-12-14 13:38:58
【问题描述】:

这可能是一个愚蠢的问题,但我可以删除下面的async 函数,因为没有await 的函数吗?它是一个正在生产的大型代码库的一部分,所以我想知道如果我删除 async 是否会产生一些奇怪的副作用?

(async function(){
  'use strict';
  const {appLogger, monitorLogger} = require('./functions/logger');

...

  for (let i in p) {
    p[i].Filename = i;
    check(p[i]);
  }

...
    
  app.get('/example.json', (req, res) => {
    res.send(JSON.stringify(checkStates, null, 4));
  })

  app.listen(port, () => {
    appLogger.info(`Exposing http://localhost:${port}/example.json`);
  })

})();

【问题讨论】:

  • 在这种情况下唯一的区别是,由于async函数总是返回一个Promise,它返回Promise<void>而不是void。但无论哪种方式,您对函数返回的值都不感兴趣。所以,是的,只需删除 async

标签: javascript node.js express ecmascript-6 async-await


【解决方案1】:

是的,可能会有副作用。 async 使函数返回一个承诺,这可能会在某处产生影响,例如,在删除 async 关键字之前和之后的行为并不总是完全相同

const fn = () => 10
const afn = async () => 10

afn() // a Promise
fn() // a number

afn().then(() => {}) // ok
fn().then(() => {}) // throws :(

但在你的情况下,一切都很好,这不会改变任何事情

【讨论】:

    【解决方案2】:

    我唯一的想法是await 将任何返回值(不是承诺)包装在承诺中。但是,这是一个自调用函数,根据您向我们展示的内容,没有任何返回,也没有任何期望返回。因此,除非您没有显示其他代码,否则您应该没问题。

    【讨论】:

      【解决方案3】:

      不,如果您不等待任何承诺,则不需要异步。

      【讨论】:

        【解决方案4】:

        是的,在这种情况下,您可以删除异步。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-23
          • 2016-07-07
          • 2016-03-25
          • 2017-10-09
          相关资源
          最近更新 更多