首页 > 解决方案 > 承诺中的 SetInterval。为什么这个承诺会立即解决?

问题描述

我试图了解承诺是如何运作的

let promise = new Promise( (resolve, reject) => {
    alert("started");
    let num = 0;
    let interval = setInterval(() => {
        alert(`state ${num}`);
        num += 2;
        if (num > 4) {
            clearInterval(interval);
            alert("finished");
            resolve()
        }
    }, 1000)
});
promise.then(alert('resolved'))

由于某种原因,我立即看到警报startedresolved
然后以 1 秒的间隔state 0,和。 为什么承诺会立即解决?如何防止承诺在直接执行之前解决?state 2state 4finished
resolve()

标签: javascriptpromisesetinterval

解决方案


.then接受函数作为参数,而不是简单的语句或表达式(除非所述表达式计算为函数)。改用这个:

promise.then(() => console.log('resolved'))

演示:

let promise = new Promise( (resolve, reject) => {
    console.log("started");
    let num = 0;
    let interval = setInterval(() => {
        console.log(`state ${num}`);
        num += 2;
        if (num > 4) {
            clearInterval(interval);
            console.log("finished");
            resolve()
        }
    }, 1000)
});
promise.then(() => console.log('resolved'))


推荐阅读