承诺链

时间:2017-03-26 05:22:20

标签: javascript promise

我有一串Promise代码如下。我希望第三个Promise等待完成第二个,但它不会!有谁能解释这个问题?

var condition = true;

// Promise
var willIGetNewPhone = new Promise(
    function (resolve, reject) {
        if (condition) {
            var phone = {
                brand: 'Samsung',
                color: 'black'
            };
            setTimeout(function(){
                console.log("First Prommis!");                        
                resolve(phone); 
            }, 2000)
        } else {
            var reason = new Error('Has not condition!');
            reject(reason); 
        }

    }
);

var showOff = function (phone) {
    var message = 'Need New Phone ' +
                phone.color + ' ' + phone.brand + ' phone';
    setTimeout(function(){
        console.log("Second promis!");
        return Promise.resolve(message);
    }, 1000)
};

willIGetNewPhone
.then(showOff) 
.then(function (fulfilled) { 
    console.log("Third Pramis!");     
})
.catch(function (error) {
    console.log(error.message);
});

1 个答案:

答案 0 :(得分:1)

您的问题是您没有从showOff函数返回Promise。实际上你没有回来。

代码return Promise.resolve(message);会返回您为setTimeout创建的匿名函数,不是 showOff - 函数。

所以你必须回复这样的承诺:

var showOff = function (phone) {
    var message = 'Need New Phone ' +
                phone.color + ' ' + phone.brand + ' phone';
    return new Promise(function(resolve) {
        setTimeout(function() {
            resolve(message);
        }, 1000);
    });
};

所以你看,基本上你的调试超时是你的问题。