2017-05-13 4 views
0

bluebird을 내 Promise libaray로 사용하고 있습니다. 나는 다음과 같은 체인이 있습니다안에 약속을 되 돌리는 것은 작동하지 않습니다.

function a() { 
    return Promise.all([promise1, promise2]).then((results) => {  
     return promise3(results) 
    }) 
} 

을하지만 promise3의 결과를 얻을 수 없었다, 나는 작동하지 않는 다음과 같은 의미 :

a().then((result) => { 
    console.log(result) 
}).catch((err) => { 
    console.error(err) 
}) 

내가 '검색과 약속에 대해 읽어하지만 나오지 않았어 문제가 어디에 있는지 이해할 수 있습니까?

+1

정확히'promise3'은 무엇입니까? – Boaz

+0

@Boaz DB 쿼리에서 약속을 반환하는 함수입니다. '.then'을 추가하면 질의 결과를 보여줍니다 ('promise3'가 잘 작동 함을 의미합니다) – Hadi

답변

5

이것은 여러 가지 이유로 나타날 수 있으며 게시물에서 어떤 것을 결정하는 것은 불가능합니다. 그래서 미래의 독자들에게 도움이 -의 위의 시나리오에서 잘못 될 수 있는지 알아 보자, 그런

function a() { 
    console.log("a called"); // if this doesn't log, you're redefining 'a' 
    return Promise.all([promise1, promise2]).then((results) => { 
     console.log("In .all"); // if this isn't called, promise1 or promise2 never resolve  
     return promise3(results); 
    }).tap(() => 
    console.log("Promise 3 fn resolved") // if this doesn't log, promise3 never resolves 
    }); 
} 

우리 then 핸들러 :

let r = a().then((result) => { 
    console.log('result', result); // this logs together with promise 3 fn 
}); // bluebird automatically adds a `.catch` handler and emits unhandledRejection 

setTimeout(() => { 
    // see what `r` is after 30 seconds, if it's pending the operation is stuck 
    console.log("r is", r.inspect()); 
}, 30000); 

가의 코드에 다음 조정을 만들자

그러면 잘못 될 가능성이있는 모든 사례에 대해 충분히 알려야합니다.

Promise 어딘가에 resolve 또는 reject을 절대 호출하지 않기 때문에 약속 중 하나가 해결되지 않습니다.

(블루 버드 특정 시나리오에서이에 대해 경고합니다 - 당신이에 경고를 가지고 있는지 확인)

될 수 있습니다 또 다른 시나리오이 취소 -하지만 나는 당신이이 켜져 있지 않습니다 있으리라 믿고있어.

해피 코딩.