我使用以下代码,我想知道最佳实践使用,如果我应该添加拒绝到这个承诺里面的圈套?
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);
})
如果不想让调用者知道重启是否成功,那么就不要。