为什么承诺的输出不是“1 2 3”而是“1 3 2”

Why the output of the Promise is not "1 2 3" but "1 3 2"?

本文关键字:而是 承诺 输出 为什么      更新时间:2023-09-26
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 ,从而设置承诺。在构造函数中设置时记录1b在你执行b()时被调用,因此记录3。你传递给then的不是b函数,而是通过调用b返回的结果(这是undefined)。然后,当您解析承诺时,它会记录2

你的代码应该像得到"1 2 3"。

a().then(b);

你可能想写a().then(b) .通过写a().then(b()),你在打电话之前先打电话b() then