Javascript 为什么承诺的输出不是;1、2、3“;但是";“1、3、2”;?

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'

我认为在解析“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');
    }).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);