在效率上有什么区别吗?如果不使用console.log()而使用setTimeout,行为是否会有所不同?
发布于 2018-06-13 11:43:14
你基本上可以做这三件事
.then(console.log())
这会立即调用console.log,而不是等到承诺得到解决,所以这可能不是您想要做的事情。
.then(console.log)
这仅在promise成功解析(需要一次函数调用)并将promise的结果隐式传递给console.log函数之后才执行console.log。
.then(() => console.log())
和以前一样,需要2个函数调用,但是你可以很容易地传递一些其他的参数给它。
在第二种情况下,要将额外的参数传递给console.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));
在第一种情况下,console.log没有接收和参数。在第二种情况下,console.log隐式地从promise接收值,在第三种情况下,它接收相同的值,但显式地接收。
在这种情况下,第二种情况和第三种情况之间唯一的性能差异是第三种情况多执行了一次函数调用(这是我们实际上不必担心的事情)。
https://stackoverflow.com/questions/50836242
复制