Javascript 关于 promises 的函数性能问题

Javascript function performance question with promises

我在主代码末尾有两个promise运行,但是一个在catch中使用箭头函数运行,一个直接运行,你知道它们之间的区别吗?

const main = async () => {
  const promisseTeste1 = () => new Promise((resolve, reject) => {
    reject("ERRO")
  });

  const promisseTeste2 = () => new Promise((resolve, reject) => {
    promisseTeste1().then().catch(reject)
  });

  // Method 1
  promisseTeste2().then().catch(console.log)
  
  // Method 2
  promisseTeste2().then().catch(e => console.log(e))
}

main()

我想知道使用方法 1 是否存在任何性能问题,甚至可能出现的问题。

如果您使用的是 console.log,那么在任何未完全过时的浏览器中都不会出现问题。

在一些非常古老的浏览器中,使用 console 的调用上下文以外的其他内容调用 console.log 是一个问题 - 但许多人认为这不值得担心。

对于传递 already-declared 函数而不是创建匿名内联函数的一般情况,一个潜在的问题是(与之前类似)如果传入/调用回调中的 this 值一个对象方法。 this 值是内联调用时的对象,globalThis(或严格模式下的 undefined)如果直接传入它。

const obj = {
  prop: 'val',
  method() {
    console.log(this.prop);
  }
};

const main = async () => {
  // Method 1
  Promise.reject().then().catch(obj.method)
  
  // Method 2
  Promise.reject().then().catch(e => obj.method(e))
}

main()

虽然与你的问题的核心无关,但正如你在上面的代码片段中看到的,我已经避免了 explicit Promise construction antipattern,并建议你也这样做。

if there is any performance issue

不远程。除非您处于紧密循环或进行多次 DOM 操作,否则一段代码的性能几乎肯定不值得考虑 - 最好关注代码的可读性和可维护性。

对于执行 .method(callback) 而不是 .method(value => callback(value)) 的更普遍的问题,请注意其行为根据传入的参数数量而变化的函数(这就是为什么 .map(parseInt) doesn't work) 幸运的是,这不是 .then.catch 的问题,因为它们只向回调传递一个参数。