【发布时间】:2015-01-11 12:38:56
【问题描述】:
我使用Q.js 作为承诺库。之前有这样的代码:
function X() {
return Q.Promise(function(resolve, reject) {
Users.find()
.then(function(user) {
Q.all([
getUserProfileInfo(user),
getUserSomethingElse(user)
])
.spread(function(profile, something) {
// do stuff
resolve();
})
.catch(function(err) {
// handle error for Q.all()
reject();
})
})
.catch(function(err) {
// handle error for User.find()
reject();
});
});
}
但现在我了解到我可以使用以下内容删除嵌套:
function X() {
return Q.Promise(function(resolve, reject) {
return Users.find()
.then(function(user) {
return Q.all([
getUserProfileInfo(user),
getUserSomethingElse(user)
]);
})
.spread(function(profile, something) {
// do stuff
resolve();
})
.catch(function(err) {
// now how do I differenciate between
// the errors from Users.find() and Q.all()?
reject();
});
});
}
底部(扁平)版本的“问题”是如何区分Users.find() 和Q.all() 的错误?或者一般来说,在长 then 链中可能还有许多其他错误?
目前我可能会使用类似的东西
function(err) {
if (err.errors && err.statusCode) {
// do something
} else if (err.message) {
// do something
}
}
但这不是真正“好”的代码吗?一定会有更好的办法?
【问题讨论】:
-
如果你想区分不同部分的错误,嵌套没有错。
标签: javascript promise q