考虑这两个脚本:
a.js
const main = async () => {
throw new Error('DESTROY ALL HUMANS');
};
main().catch(error => console.error(error));
b.js
const main = async () => {
throw new Error('DESTROY ALL HUMANS');
};
main().catch(console.error);
a.js 使用lambda但 b.js 直接传递console.error
。
我在某处看到 b.js 可能需要console.error.bind(console)
。但是,当我运行它们时,它们都表现出相同的行为。
这两者的行为有何不同?
答案 0 :(得分:1)
如果您还没有,请阅读documentation on MDN about this topic。它非常彻底。 .catch
是包含对obj.then(undefined, onRejected)
的调用的语法糖。
onRejected
在承诺被拒绝时调用Function
。这个函数有一个参数:reason
- 拒绝原因。
除此之外,我会调查callbacks。 console.error
本身并不需要包含在函数中 - 只是在Promise-rejection案例中使用它。
对于b.js
,您发现自己可以将console.log
函数作为first-class object传递,而.catch
将知道如何对待它,即执行它以响应reason
中传递的拒绝(这是a.js
明确定义的内容)。