내 주 컨트롤러 기능에서 체인화 및 오류 처리를 위해 사용할 수 있도록 몽구스 정적 메서드 'load'를 만듭니다.mongoose 정적 메서드가 bluebird 약속을 반환합니다
UserSchema.load('54ae92dd8b8eef540eb3a66d')
.then(....)
.catch(....);
문제는 ID가 잘못되어이 오류를 catch해야합니다. 모델 레이어에서이 작업을 수행하는 것이 더 바람직하다고 생각합니다.
다음과 같이하면 컨트롤러가이 오류를 포착 할 수 있습니다.
UserSchema.statics.load = function(id) {
if (!mongoose.Types.ObjectId.isValid(id)) {
return Promise.resolve().then(function() {
throw new Error('not a mongoose id');
}); ------------(*)
}
return Promise.cast(this.findOne({
_id: id
}).exec());
};
그러나 내가 다음을 수행하면 컨트롤러 .catch 함수에 오류가 성공적으로 전달되지 않습니다.
AchievementSchema.statics.load = function(id) {
if (!mongoose.Types.ObjectId.isValid(id)) {
throw new Error('not a mongoose id');
}
return Promise.cast(this.findOne({
_id: id
}).exec());
};
제 질문은 올바르게 수행하고 있습니까? 그렇다면 더 쉬운 방법으로 (*) 문장을 쓸 수 있습니까? 내가하고있는 것은 못생긴 것처럼 보인다. 고마워.
방금 대답에 찬성표를 던지는 걸 잊어 버렸습니다. –
약속을 모두 블루 버드 약속에 던지지 않는다면'Promise.method'의 약속은 경쟁 조건이됩니까? –