関数呼び出しからのエラーを返す際に混乱が生じます。 例として、sequelizeJSを使用してその点を説明しています。通常 :ネストされたthenと約束のエラーを返すExpressJS/NodeJs
First.Ctrl
var second_ctrl = require('../ctrl/second');
testCode : function(req, res, next){
return second_ctrl.getData()
.then(function(resultData){
res.json(resultData);
})
.catch(function(error){
res.json(error)
})
}
Second.Ctrl
getData : function(){
return models.Data.findAll()
}
のgetDataのfindAllの誤差はfirst_ctrlのブロックをキャッチするために行くだろう。しかし、私はのようないくつかの操作を行う必要がある場合:
Second.Ctrl - 実行 - 操作、私はスローエラー、リターンエラーを使用し、内側のcatchブロックを削除しますが、両方のケースで試してみました
getData : function(){
return models.Data.findAll()
.then(function(result){
if(result == null)
throw new Error ('No data found');
return result;
})
.catch(function(error){
throw error;
//return error
})
}
エラーオブジェクトを受け取ったresultDataでfirst_ctrlをブロックします。
これらのネストされたコールのような状況のこの種のためのベストプラクティスをより深く行くことができている何(first_ctrl - > second_ctrl - > third_ctrl)
私を知ってみましょう。あなたの考えを楽しみにしています
投げたときにブロックに着陸したことは確かですか?期待される振る舞いはあなたの例に似ています。外側のcatchブロックで終わるはずです(外側のブロックを常に把握したい場合は内側のcatchブロックは必要ありません)。 –
でもインナーキャッチブロックを外してみましたが、first_ctrlのthenブロックで終わりです。 –
@adeneo:私が約束しているように、私はqやbluebirdのような約束のライブラリを使わなければなりません。これらは通常のようには不可能です。可能であれば、スニペットでどのようにできるのか教えてください。 –