【发布时间】:2016-04-06 10:09:21
【问题描述】:
我正在使用 nodeJs 和 bluebird。我有方法来检查参数的有效性,所以我创建了一个我有的模块(见下面的代码),它们都是承诺。
exports.validateSpeciality = validateSpeciality;
exports.validateGovernorate = validateGovernorate;
exports.validateCities = validateCities;
在我的控制器中(见下面的代码)我总是在包含“res.send(results)”的情况下得到第一个承诺结果
validator
.validateSpeciality(speciality)
.then(validator.validateGovernorate(governorate))
.then(validator.validateCities(governorate, cities))
.then(Doctor.searchBySpecialityAndByCities(speciality, cities))
.then(function (results) {
console.log(results);
res.send(results);
})
.catch(function (error) {
console.log(error);
res.status(400).send(error);
})
有人可以向我解释为什么它不能以这种方式工作吗?即使其中一个 promise 被拒绝,它也总是执行最后一个 then 而不会去 catch。
【问题讨论】:
-
promise
then接受一个函数,而不是一个 promise 作为参数。 -
要添加到@KaiHao 的评论 - 如果你想像这样链接承诺,你需要传递一个函数,返回一个承诺给
.then。 -
好的,我明白了,所以解决方案是 then(function() { call_my_function })
-
您应该会在控制台中看到来自 bluebird 的警告,告诉您问题出在哪里 - 您没有看到吗?
标签: javascript node.js bluebird