使用setTimeout进行基本JavaScript承诺测试

时间:2015-04-20 13:22:14

标签: javascript promise bluebird

我正在尝试使用bluebird进行基本的承诺测试,但结果并不是我所期待的。我正在尝试将“我应该先登录吗?4000”消息首先登录到我的控制台,但第二个控制台消息总是首先显示。我做错了什么,在2000年消息之前我需要做些什么才能让“4000”消息记录下来?

function longRunningPositiveTest3() {
    return new Promise(function(resolve) {
        setTimeout(function () {
            console.log("Should I be logged first? 4000");
            resolve();
        }, 4000);
    });
}

function longRunningPositiveTest4() {
    return new Promise(function(resolve) {
        setTimeout(function () {
            console.log("Should I be logged first? 2000");
            resolve();
        }, 2000);
    });
}

Promise.resolve(longRunningPositiveTest3())
    .then(longRunningPositiveTest4());

由于

1 个答案:

答案 0 :(得分:6)

您正在调用两个立即启动超时的函数。您需要将回调函数传递给then

使用

Promise.resolve(…) // some starting promise
.then(longRunningPositiveTest3)
.then(longRunningPositiveTest4);

longRunningPositiveTest3() // no need to wrap it in Promise.resolve() (but no harm either)
.then(longRunningPositiveTest4);