Javascript 为什么承诺的输出不是;1、2、3“;但是";“1、3、2”;?
我认为在解析“next”之后,它将调用输出“2”的函数,我不明白为什么“console.log(3)”首先发生(异步?)。我想知道我误解了Promise的用法的哪一部分。您可能想编写Javascript 为什么承诺的输出不是;1、2、3“;但是";“1、3、2”;?,javascript,Javascript,我认为在解析“next”之后,它将调用输出“2”的函数,我不明白为什么“console.log(3)”首先发生(异步?)。我想知道我误解了Promise的用法的哪一部分。您可能想编写a()。然后(b)。通过编写a().then(b()),您在调用then之前调用了b() a = function() { return new Promise(function(resolve, reject) { console.log(1); resolve('next'
a()。然后(b)
。通过编写a().then(b())
,您在调用then
之前调用了b()
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());
调用a
,这将设置承诺。在构造函数中设置时,会记录1
<当您执行b()
时,会调用code>b,从而记录3
。您传递给的不是b
函数,而是调用b
返回的结果(即未定义的)。然后,当您解决承诺时,它会记录2
您的代码应该是“1 2 3”
直到承诺解析始终是异步的。我原以为然后回调会在添加到已解决的承诺后立即调用,但显然它在事件循环中仍然会旋转。你是说a()
,而不是a
:)哇,你们真快!
a().then(b());
a().then(b);