为何Promise.then中传入void表达式后,后续then的参数未变为undefined?
为什么最后一个then的参数x不是undefined?
咱们拆解这段代码一步步说清楚:
先看
void console.log('3'):console.log('3')会立即同步执行(和Promise的异步流程没关系),输出3。void运算符的作用是执行后面的表达式,然后返回undefined,所以第一个then的参数其实是undefined。
Promise的
then方法有个关键规则:- 如果传给
then的参数不是函数(比如这里的undefined),这个then就会变成一个「透传」环节——它不会修改前一个Promise的resolved值,直接把这个值原封不动地传给下一个then。
- 如果传给
所以第一个then因为参数不是函数,直接把Promise.resolve(2)的结果2传递给了最后一个then,因此x的值是2,而非undefined。
内容的提问来源于stack exchange,提问作者Andreas Herd
相关产品推荐
相关产品推荐

