몇 가지 데이터베이스 조회를 수행하기 위해 Promise 기반 ORM 모듈 인 Bookshelf.js를 사용하고 있습니다. 사용자가 제공하는 키가 주어지면 키가 두 테이블 중 하나의 레코드와 일치하는지 확인해야합니다. 첫 번째 표에서 찾으면 그 기록을 반환해야합니다. 그러나 첫 번째 표에서 찾지 못하면 두 번째 표를 살펴 봐야합니다. 기본적으로 조건부로 then
블록을 실행해야합니다. 약속을 사용하여이를 어떻게 수행합니까? 제가 현재 가지고있는 것은 매우 지저분합니다. 실제로 resolve
을 첫 번째 School
룩업에서 호출하면 어떤 일이 일어날 지에 대해 약간의 불확실성이 있습니다 - 두 번째 then
블록도 실행됩니까?약속을 사용하여 조건부로 두 번째 작업을 수행하려면 어떻게합니까?
exports.findTargetRecord = function(code){
return new Promise(function(resolve, reject){
Schools
.query({ where: { code: code }})
.fetchOne()
.then(school => {
if(school) return resolve(school);
return Organizations
.query({ where: { code: code }})
.fetchOne();
})
.then(org => {
if(org) return resolve(org);
resolve(null);
})
.catch(err => reject(err));
});
};
더 깨끗한 방법이 있습니까?
그냥then
블록 내부 전체
else
논리를 유지할 수
http://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i -avoid-it –