JavaScript로 약속을 이해했거나 atleast로 생각합니다.몽구스 루트에서 약속 사용하기
는 약속을 만듭니다
var promise = new Promise(function(resolve, reject){
// do something async here
if(itWorked){
resolve();
}else {
reject();
}
});
는 약속을 사용하여 콜백 지옥이되고있다
promise.then(function(result){
},function(err){
});
내 말은 스택 내 몽구스 노선의 일부를 기반으로 응용 프로그램을 가지고있다. 나는 몽구스 루트의 콜백에서 벗어나 약속을 사용하여 처리하도록한다. 그러나 나는 그것을 정확하게하는 방법을 알아낼 수 없습니다. 예를 들어
: 당신은 코드를 읽고 유지하기 어려워을 받고 있음을 알 수 위의 예에서
app.get('/users', function(req, res){
User.findOne(_id, function(err, user){
if(err)
console.log(err)
else if(user){
Receipt.findOne(user.bookName, function(err, book){
if(err)
console.log(err)
else if(book){
// again do something here
}
})
}
})
});
. 내 코드를 개선하기 위해 여기서 Promises를 어떻게 사용할 수 있습니까?
답변 해 주셔서 감사합니다. 몇 가지 개념을 명확히하기위한 몇 가지 질문이 있습니다. 'mongoose.Promise = Promise' 라인에서 네이티브 ES6 약속 라이브러리를 몽구스로 연결하고 있습니까? 그리고'then' 함수는'_findUser' 약속이 반환 될 때 실행됩니까? 그리고'약속을 되풀이하다 '는 말은'_findUser' 함수가'resolve'또는'rejected'인지 여부를 추측합니다. 내가 맞습니까? – Skywalker
정확하게,'mongoose.Promise = Promise'는 몽구스에게 네이티브 ES6 약속을 사용한다고 말하고 있습니다. 연쇄 약속 :'_findUser()'는 예상되는 사용자를 언젠가 돌려주는 무거운 작업입니다 ** ** 사용자가'user'를 해결했을 때 새로운 작업을 시작할 수 있습니다 (반환을 알아 봤습니까?)'_findReceipt() '. 그것은 또한 '영수증'을 반환 할 무거운 작업입니다. ** ** 당신이 '영수증'을 해결하면 귀하의 응답을 되돌릴 준비가 된 것입니다. ** 태스크 **가 에러를 발생 시키면,'catch' 문을 실행합니다. – Manu
설명해 주셔서 대단히 감사드립니다. 나는 대부분 그것을 지금 이해합니다. 웬일인지 나는 내 머리를 감싸기가 꽤 어렵다는 것을 알고있다. – Skywalker