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
的问题,因为它们只向回调传递一个参数。
我在主代码末尾有两个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
的问题,因为它们只向回调传递一个参数。