首页 > 解决方案 > Javascript Promises 不会像我期望的那样工作

问题描述

我试图理解承诺并在这里有点困惑。我正在玩不同的场景,我在其中一个上叠加。为什么不let third = function()等待let second = function()停止计数?

let first = function () {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            console.log('first');
            resolve()
        }, 3000)
    })
}

let second = function () {
    return new Promise(function (resolve, reject) {
        let iter = 7
        console.log(iter);
        for (let i = 0; i <= iter; i++) {
            (function(n) {
                setTimeout(function(){
                    console.log('hi');
                    console.log(n);
                }, 400 * i);
            }(i)*i);
        }
        console.log('seco');
        resolve();
    })
}    

let third = function() {
    return new Promise(function (resolve, reject) {
        console.log('thir');
        resolve()
    })
};

let scenario = function() {
    first()
    .then(() => second())
    .then(() => third())
} 
scenario()

标签: javascript

解决方案


setTimeout不等待函数返回 - 它只是安排它稍后执行。调用setTimeout立即返回,然后您的任务完成。

要等待预定函数在一定时间后执行,请resolve()在延迟函数结束时调用。这样,promise 只会在预定函数执行后完成。


推荐阅读