首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >promise链中的.then(console.log())和.then(() => console.log())在执行上有何不同

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

Stack Overflow用户
提问于 2018-06-13 19:35:57
回答 1查看 22.4K关注 0票数 9

在效率上有什么区别吗?如果不使用console.log()而使用setTimeout,行为是否会有所不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-13 19:43:14

你基本上可以做这三件事

代码语言:javascript
代码运行次数:0
运行
复制
.then(console.log())

这会立即调用console.log,而不是等到承诺得到解决,所以这可能不是您想要做的事情。

代码语言:javascript
代码运行次数:0
运行
复制
.then(console.log)

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

代码语言:javascript
代码运行次数:0
运行
复制
.then(() => console.log())

和以前一样,需要2个函数调用,但是你可以很容易地传递一些其他的参数给它。

在第二种情况下,要将额外的参数传递给console.log,需要使用Function.prototype.bind方法。

代码语言:javascript
代码运行次数:0
运行
复制
const promise = new Promise((resolve, reject) => {
  resolve('');
});
promise.then(console.log.bind(console, 'new arg'));

并查看上面提到的所有三种情况的实际情况

代码语言:javascript
代码运行次数:0
运行
复制
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接收值,在第三种情况下,它接收相同的值,但显式地接收。

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

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50836242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档