2017-12-27 6 views
1

2 약속을 사용하려고합니다. 두 번째 약속은 첫 번째 약속에 달려 있습니다. 그리고 3 약속은 두 약속 모두에 달려 있습니다. 하지만 두 번째 약속이 오류가 실패하면 첫 번째 약속 :다른 약속 내에서 약속 실패를 처리 할 수 ​​없습니다.

UnhandledPromiseRejectionWarning : 처리되지 않은 약속 거절 (거부 ID : 2) : 형식 오류가 :

이 널 (null)

의 특성 '이름을'읽을 수 없습니다 것은 내 코드입니다 :

var Asset = require('../models/index').Asset; 
var Price = require('../models/index').Price; 

var currency = req.params.currency; 

var values = { 
       where: { slugify_url: currency },      
      }; 

// get asset information 
var promisse_asset = Asset.findOne(values); 


// get prices information on this asset 
var promisse_prices = promisse_asset.then(function(asset) { 

    console.log(asset); // outputs null 
    // some processing 
    if (!!asset) { 
     ... 


}); 


return Promise.all([promisse_asset, promisse_prices]).then(function([asset, results]) { 
    ... 

어떻게 해결할 수 있습니까? 내 데이터베이스에서 자산을 찾지 못하면 어떻게 처리 할 수 ​​있습니까?

+1

'catch'(또는 두 번째'then' 인수)가 누락 된 것처럼 보입니다. 그것 없이는, 당신은 그것을 얻습니다 _ "처리되지 않은 약속 거부"_ 오류 – Phil

+0

@Phil 나는 첫 번째 약속 후에 캐치를 넣습니다. 그러나 캐치 조건에 들어 가지 않는 것 같습니다. 어떻게해야합니까? –

+1

아, 첫 번째 약속은 'null'값으로 성공적으로 해결됩니다. 이 경우 약속을 실패하게 만들려면 오류를 던져야합니다. 그 사람은'Promise.all' 약속에 잡힐 필요가 있습니다 – Phil

답변

1

약속 처리를 일괄 처리하고 거부 된 결과가 포함 된 이있는 상황이 있습니다.Promise.all입니다. 어떻게 할 수 있는지는 here (마지막 코드 블록)이라고 설명되어 있습니다.

경고가 표시되지 않고 곧 스택에서가 아니라 약속되지 않은 약속을 포착하려는 경우가 있습니다 (곧 지원 중단되고 오류가 발생 함). 어떻게 할 수 있는지는 here입니다.

또는 해결 값이 예상 한 값이 아니기 때문에 약속을 거부하기 만하면 Phil이 제공 한대로 던지거나 Promise.reject("Something should not be null")을 반환 할 수 있습니다.