2016-06-16 15 views
0

直面して問題は、私はNodeJsマングースの約束は、/マングースとキャッチ

first catch 
second catch 

を取得し、実行した後

MyModel.find().then((data)=> Promise.reject()) 
     .catch(()=>console.log('first catch')) 
     .then(()=>console.log('ok')) 
     .catch(()=>console.log('second catch')); 

を約束しかし、私は唯一のネイティブの約束でそれを行う場合:

Promise.reject() 
     .catch(()=>console.log('first catch')) 
     .then(()=>console.log('ok')) 
     .catch(()=>console.log('second catch')); 
実行後の

約束の面でokです

docs

マングースは私が行うことによって、次のことを解決できることを見出したpromise implementation

自身が

new Promise((resolve, reject) => { MyModel.find().then((data) => reject()) }) 
     .catch(()=>console.log('first catch')) 
     .then(()=>console.log('ok') 
     .catch(()=>console.log('second catch')); 

それはそれとして働いて使用しているようですドキュメントに従って:

first catch 
ok 

Aどのようにしてより良いものを扱うのか?

答えて

1

マングースはPromises/A +の約束を使用しています。下位互換性のために、Mongoose 4はデフォルトでmpromiseの約束を返します。

将来的に有望な機能を使用するには、ブルーバードやネイティブES6の約束などのライブラリを使用する必要があります。ただ、それを使用しますお気に入りのES6スタイルの約束コンストラクタとマングースにmongoose.Promiseを設定することを行うには:

require('mongoose').Promise = Promise; 
// or 
require('mongoose').Promise = require('bluebird'); 

Mongoose documentation

+0

ありがとうございました。 – BotanMan

0

あなたも約束のQライブラリーを使用することができます。 "q": "^ 1.4.1" qは、Javaスクリプトpromises.soのための最も人口の多いライブラリであり、複数の約束結果を一緒に使用できます。

var Q = require('q'); 
var promises= Q.all([ 
Model.find(), 
Model2.find(), 
Model3.find() 
]); 
promises.then(function(data){ 
//console.log(data[0]); 
//console.log(data[1]);`enter code here 
//console.log(data[2]); 
});`enter code here` 
promises.then(null,function(err){ 
});