不使用 await 时删除异步是否安全?

Safe to remove async when no await's are used?

这可能是一个愚蠢的问题,但是我可以删除下面的 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`);
  })

})();

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

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

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

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

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

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

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

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