首页 > 延迟函数队列问题

延迟函数队列问题

有两个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都等待两秒后执行。


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

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);
【热门文章】
【热门文章】