2017-12-27 19 views
1

私は2つの約束を使用しようとしています、第2約束は最初の約束に依存します。そして3つの約束は両方の約束に依存します。しかし、最初の約束は、私は第二約束で、このエラーを取得する失敗したとき:他の約束の中で約束の失敗を処理することができません

UnhandledPromiseRejectionWarning:TypeError例外:未処理の除去(2却下ID)約束ヌル

のプロパティを読み取ることができません「名前を」これは私のコードです:

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

「キャッチ」(または第2の 'then'引数)が不足しているようです。それがなければ、あなたはそれを手に入れました_未解決の約束の拒否_エラー – Phil

+0

@Phil最初の約束の後にキャッチを入れますが、キャッチ状態に入っていないようです。私はどうすればいいのですか? –

+1

ああ、最初の約束事は成功して解決されています。ちょうどヌル値です。その場合、約束を破らせるためにエラーを投げるべきです。それは 'Promise.all'約束で捕らえられる必要があります – Phil

答えて

1

約束を処理し、すべての結果を取得する状況があります。には拒否されたものが含まれていますPromise.all。あなたがそれを行う方法は、here(最後のコードブロック)で説明されています。

警告が表示されずに(すぐに廃止され、エラーが発生することなく)、スタック上ではなく、待ち行列の拒否約束をキャッチしたいという状況があります。あなたがそれを行う方法は、hereと説明されています。

解決した値が予期したものと異なるため、約束を拒否したかっただけでした.Philの提供どおりに投げたり、Promise.reject("Something should not be null")を返すことができます。

関連する問題