Add reject/resolve to catch/success

Add reject/resolve to catch/success

本文关键字:catch success to resolve reject Add      更新时间:2023-09-26

我使用以下代码,我想知道最佳实践使用,如果我应该添加拒绝到这个承诺里面的圈套?

run: function (req, res) {
        if (req) {
            return this._un(req).then(function() {  
                return proce.restart().then(function() {                    
                    return res.status(200).end("sucess");   
                    //Here should I use reslove
                });                                                             
            }).catch(function(err) {                
                return res.status(500).send("error: " + err);
                //Here should I use reject???               
            });                     
        }
        else {          
            return new Promise(function(resolve, reject) {  
                reject("No application content found");
            });         
        }       
    }
};

你不能在承诺中"添加拒绝"。承诺要么未解决,要么已解决(解决/拒绝)。

如果提供了req,您的代码当前返回一个承诺,该承诺将用end的返回值(如果重启成功)或send的返回值(如果不是)来解决,我相信在这两种情况下都是响应对象本身(res)。

如果你想让调用者知道重启是否成功,那么是的,你想拒绝这个承诺;随着ES2015的承诺,你可以通过抛出catch来做到这一点,我假设Bluebird是类似的:

.catch(function(err) {
    res.status(500).send("error: " + err);
    throw err; // Or `throw new Error(err);`, it depends on what `err` is and your convention
})

…或者使用蓝鸟的Promise.reject(这也是es2015兼容):

.catch(function(err) {
    res.status(500).send("error: " + err);
    return Promise.reject(err);
})

如果不想让调用者知道重启是否成功,那么就不要。