Javascript Promises 并不像我期望的那样工作

标签 javascript

我试图理解 promise ,但在这里有点困惑。我正在玩不同的场景,我会叠加其中的一个。为什么 letthird = 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()

最佳答案

@johnnybigH, 第二个函数解析超出了超时时间,因此从技术上讲,它不会等待超时函数完成,因为您正在解决 setTimeout 之外的问题。现在第二个函数已解决,因此将执行第三个函数。 您可以做的是循环的第二个函数内部。查找最后一次迭代并解析结束函数。

for (let i = 0; i <= iter; i++) {
        (function(n) {
            setTimeout(function(){
                console.log('hi');
                console.log(n);
            if(i == iter) resolve();
            }, 400 * i);
        }(i)*i);
    }

关于Javascript Promises 并不像我期望的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57964796/

相关文章:

javascript - 如何从外部 api 获取特定信息到我的 ng-repeat

javascript - 为什么 Bootstrap 面板折叠不能与 JSF 一起使用?

javascript - 更改鼠标滚轮上的背景图像(向下滚动)。向上滚动时将图像更改回来

javascript - 导入 React Native 组件时异步 JS 函数未定义

javascript - 表格 tr 和 td 有奇怪的点击事件

javascript - 如何在多行控制台上更新数据

javascript - Ajax 响应状态 200 但显示错误消息

javascript - 如何查询orchestrate.io

javascript - 用 Redux 更新整个状态的方法是什么?

javascript - php mcrypt 到 javascript aes 集成