登录

javascript - 延迟函数队列问题

有两个function, 分别延迟2000ms执行,目的是先执行function1, 等function1结束再执行function2.我用promise决解了,下面贴代码。

function fn1 (resolve) {
    setTimeout (function () {
        log ('fn1');
        resolve ();
    }, 2000);
}
function fn2 (resolve) {
    setTimeout (function () {
        log ('fn2');
    }, 2000);
}

new Promise (fn1).then (fn2);

但如果是有三个function,我尝试过Promise chain 的写法,如下

function fn1 (resolve) {
    setTimeout (function () {
        log ('fn1');
        resolve ();
    }, 2000);
}
function fn2 (resolve) {
    setTimeout (function () {
        log ('fn2');
        resolve(); //error, resolve is not a function
    }, 2000);
}
function fn3 () {
    setTimeout (function () {
        log ('fn3');
    }, 2000);
}
new Promise (fn1).then (fn2).then (fn3);

在fn2 中提示没有定义resolve方法,请问这个要如何解决?
最终要达到的目的 : 各自function都等待两秒后执行。

# JavaScript
伊谢尔伦伊谢尔伦2153 天前395 次浏览

全部回复(2) 我要回复

  • 黄舟

    黄舟2017-04-11 11:40:19

    new Promise(fn1).then(() => new Promise(fn2)).then(() => new Promise(fn3))

    回复
    0
  • PHP中文网

    PHP中文网2017-04-11 11:40:19

    then 不會自動幫你扔進去的 function 給包裝成 promise ,所以你必須自己把方法都包在 promise 內,第一個能執行成功是因為你有用 new Promise(fn1) 給包起來,後面幾個就沒有了,所以才出錯。

    function fn1 (resolve) {
        return new Promise(function(resolve, reject) {
            setTimeout (function () {
                console.log ('fn1');
                resolve();
            }, 2000);
        })
    }
    
    function fn2 (resolve) {
        return new Promise(function(resolve, reject) {
            setTimeout (function () {
                console.log ('fn2');
                resolve(); 
            }, 2000);
        })
    }
    
    function fn3 () {
        return new Promise(function(resolve, reject) {
            setTimeout (function () {
                console.log ('fn3');
                resolve();
            }, 2000);
        })
    }
    
    fn1().then(fn2).then (fn3);

    回复
    0
  • 取消回复发送