为什么承诺的输出不是“1 2 3”而是“1 3 2”
Why the output of the Promise is not "1 2 3" but "1 3 2"?
a = function() {
return new Promise(function(resolve, reject) {
console.log(1);
resolve('next');
}).then(function() {
console.log(2);
return;
});
};
b = function() {
console.log(3);
};
a().then(b());
我以为解决"next"后,它会调用输出"2"的函数,我不明白为什么"console.log(3)"首先发生(异步?我想知道我对 Promise 的使用误解了哪一部分。
a().then(b());
调用 a
,从而设置承诺。在构造函数中设置时记录1
。 b
在你执行b()
时被调用,因此记录3
。你传递给then
的不是b
函数,而是通过调用b
返回的结果(这是undefined
)。然后,当您解析承诺时,它会记录2
。
你的代码应该像得到"1 2 3"。
a().then(b);
你可能想写a().then(b)
.通过写a().then(b())
,你在打电话之前先打电话给b()
then
。
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- Nodejs和express路由,如何处理客户端的承诺
- 如何在多承诺链中处理谷歌地图API V3事件
- 承诺合并流
- Jslint 错误:需要条件表达式,而是看到分配
- JavaScript承诺-无法读取属性'那么'的未定义
- 为什么承诺的输出不是“1 2 3”而是“1 3 2”