在我的承诺堆栈深处,我打这个电话:
function isNameAvailable(name) {
return registry.getName(name)
.then(function(result) {
return result ? false : true;
});
}
不幸的是,这是编程错误,注册表未定义。我的node.js应用程序没有打印任何错误消息。有什么想法吗?我正在使用蓝鸟承诺库。
修改
这是调用代码。我刚刚添加了捕获,但它没有捕获任何东西。
function _checkAvailability(name) {
return isNameAvailable(name)
.then(function(isAvailabile) {
if (isAvailabile) {
return true;
}
else {
throw new NameNotAvailable('Name "' + name + '" is not available');
}
})
.catch(function(error) {
console.log('isNameAvailable threw', error);
throw error;
})
}
堆栈最终应该回滚到由HTTP请求导致的express.js调用的函数。这是我抓住所有错误并打印堆栈跟踪的地方(但显然它不打印任何东西):
function createUser(req, res) {
userService.createUser(req.body)
.then(function(user) {
res.status(201).send(user);
})
.catch(function(error) {
log.trace(error);
res.status(500).send({'message': error.toString()});
});
}
答案 0 :(得分:0)
已编辑以反映您的更新:
Naresh是对的,如果它被抛出,你需要从名称中返回被拒绝的承诺。你可以试试
function isNameAvailable(name) {
try {
return registry.getName(name)
.then(function(result) {
return result ? false : true;
});
} catch(e){
return Promise.reject(e)
}
}
请参阅此文章,了解深陷承诺中的错误吞咽情况。
http://www.mattgreer.org/articles/promises-in-wicked-detail/#promises-can-swallow-errors-