为什么这个'Promise Chaining'不起作用?

时间:2017-10-28 11:49:11

标签: javascript promise

我正在努力了解Promises和Promise Chaining。 根据我的理解,以下代码必须打印'你好!'到控制台。但是,事实并非如此。 任何人都可以解释为什么会发生这种情况以及正确的方法是什么?

function func01() {
    console.log('func01');
    return new Promise(function(){
        console.log('promise');
        setTimeout(function(){
            console.log('st');
            return 'hello !'
        },5000);
    }).then(function(data){
        console.log('then01');
        return data;
    });
}
function func02() {
    console.log('func02');
    return func01().then(function(data){
        console.log('then02');
        return data;
    })
}
function func03() {
    console.log('func03');
    func02().then(function(data){
        console.log('then03');
        console.log(data);
    });
}
func03();

1 个答案:

答案 0 :(得分:1)

承诺应该resolve承诺将其传递给当时。 setTimeout是异步调用,不会考虑返回该函数(Per @jcaron)。结合这些,你走了:

    function func01() {
        console.log('func01');
        return new Promise(function(resolve, reject){
            console.log('promise');
            resolve( 'hello !' )
        }).then(function(data){
            console.log('then01');
            return data;
        });
    }
    function func02() {
        console.log('func02');
        return func01().then(function(data){
            console.log('then02');
            return data;
        })
    }
    function func03() {
        console.log('func03');
        func02().then(function(data){
            console.log('then03');
            console.log(data);
        });
    }
    func03();