[Javascript] 在從setTimeout作出承諾時感到困惑


Answers

在你的第二個例子中,你有一個在then()函數內部返回一個promise的函數,但是這個promise並沒有暴露在進程then()中,所以當它解析的時候沒有任何動作來執行。 然後()實際上返回它自己的承諾,這允許鏈接工作。 在第二個例子中,then()的結果應該是你在第一個then()中返回的Promise,

Question

我是Promise新手。 我寫了兩個例子:

第一個是:

new RSVP.Promise(function (resolve, reject) {
    setTimeout(function () {
        resolve("HI")
    }, 3000);
}).then(function (result) {
    console.log(result);
});

如我所料,這將在3秒後打印出“HI”。 這是因為“那麼”就等著呢,只有在諾言落戶的時候才叫。

第二個是:

new RSVP.Promise(function (resolve, reject) {
    resolve();
}).then(function () {
    return RSVP.Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve("HI")
        }, 3000);
    });
}).then(function (result) {
    console.log(result);
});

我認為它也會在3秒後打印“HI”。 但沒有發生。 我認為第二個“那麼”會等到第一個“那時”的承諾。

第二個例子有什麼問題,以及如何解決這個問題?