私はJavaScriptまたはatleastの約束を理解しています。マングースルートの約束を使用
は約束を作成します。
var promise = new Promise(function(resolve, reject){
// do something async here
if(itWorked){
resolve();
}else {
reject();
}
});
プロミスを使用します。コールバック地獄になっている
promise.then(function(result){
},function(err){
});
私はMEANスタックと私のマングースルートの一部に基づいてアプリを持っています。私はモンゴーズルートのコールバックから離れ、Promisesを使って処理したい。しかし、私はそれをいかに正確に行うかを理解できないようです。
例:上記の例で
app.get('/users', function(req, res){
User.findOne(_id, function(err, user){
if(err)
console.log(err)
else if(user){
Receipt.findOne(user.bookName, function(err, book){
if(err)
console.log(err)
else if(book){
// again do something here
}
})
}
})
});
あなたは、コードの読み取りと保守が難しくなっていることがわかります。コードを改善するためにここで約束を使用するにはどうすればよいですか?
ありがとうございました。いくつかの概念をクリアするための質問はほとんどありません。 'mongoose.Promise = Promise'行でネイティブES6の約束ライブラリをマングースに差し込んでいますか? 'thenf'関数は' _findUser'約束が返ったときに実行されますか?そして、「約束を返す」という言葉を推測しているのは、 '_findUser'関数が'解決済み 'か'拒否済み 'かを意味します。私はそうですか? – Skywalker
正確には、 'mongoose.Promise = Promise'はネイティブのES6の約束を使うようモンゴースに伝えています。連鎖約束: '_findUser()'は予想されるユーザーをいつか戻す重い作業です** **あなたが 'user'を解決したときにあなたは新しい仕事を始めることができます(あなたは戻りますか?)' _findReceipt() '。それはまた、「領収書」を返す重い作業です。 **あなたが「領収書」を解決したとき、あなたはあなたの返答を返す準備ができています。これらのタスクのうち、** ANY **がエラーを起こした場合、あなたは 'catch'ステートメントを実行します – Manu
ありがとうございます。私は今ほとんどそれを理解しています。なんらかの理由で私は頭がおかしいと約束しています。 – Skywalker