承诺链中的 .then(console.log()) 和 .then(() => console.log()) 在执行上有何不同



效率有什么区别吗? 如果使用 setTimeout 而不是 console.log((

你基本上可以做这三件事

.then(console.log())

这会立即调用控制台.log而无需等到承诺得到解决,因此您可能不想这样做。


.then(console.log)

这仅在 promise 成功解析(需要一次函数调用(后执行控制台.log并将 promise 的结果隐式传递给控制台.log函数。


.then(() => console.log())

和以前一样,需要 2 个函数调用,但您可以轻松地向其传递一些其他参数。


要将其他参数传递给控制台.log在第二种情况下,您需要使用Function.prototype.bind方法。

const promise = new Promise((resolve, reject) => {
resolve('');
});
promise.then(console.log.bind(console, 'new arg'));

并查看上述所有三个案例的实际应用

const promise1 = new Promise((resolve, reject) => {
resolve('promise 1');
});
promise1.then(console.log());
const promise2 = new Promise((resolve, reject) => {
resolve('promise 2');
});
promise2.then(console.log);
const promise3 = new Promise((resolve, reject) => {
resolve('promise 3');
});
promise3.then(v => console.log(v));

在第一种情况下,控制台.log没有收到和参数。在第二种情况下,控制台隐式地从 promise .log接收值,在第三种情况下,它接收相同的值,但显式地。

在这种情况下,第二种和第三种情况之间的唯一性能差异是第三种情况多执行了一个函数调用(这是我们真正不必担心的事情(。

最新更新