2
약속 라이브러리로 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
}
}
같은 것을 사용할 수 있습니다 그러나 이것은 "좋은"코드 isit 하 정말 아니다? 더 좋은 방법이있을거야?
사용자를 찾는 데 문제가있는 경우
[지연 반 패턴이란 무엇이며 어떻게 피할 수 있습니까?] (http://stackoverflow.com/questions/23803743/what-is-the-deferred-antipattern-and-how-do-i-avoid- 그것) –
다른 부분의 오류를 구별하려면 중첩에 문제가 없습니다. – Bergi