2017-02-02 4 views
0

私は約束のためにブルーバードを使用していますが、ブルーバードではない約束を返すライブラリも使用しています。 .asCallbackを使用します。私はPromise.resolveを使ってラップしようとしましたが、これはオンラインのどこかで見つけましたが、約束のチェーンのエラーを隠しています。コード内でthen/catchを取り出すと、エラーが発生したにもかかわらず、クライアント呼び出しからエラーをスローするのではなく解決されます。ブルーバードと約束を包み込む方法

明白な解決策であるnew Promise(resolve,reject)で新たな約束事を作成するだけでなく、元の約束事に何らかのエラーを伝播させるブルーバードの約束に変換するより良い方法がありますか?

module.exports.count = function(params, done){ 
    var promise = client.count({ 
    "index": config.search.index + "_" + params.index 
    }).then(function(response){ 
    logger.debug(response); 
    }).catch(function(e){ 
    logger.error(e); 
    }); 
    return Promise.resolve(promise).asCallback(done); 
+0

"*それは約束のチェーン*のエラーを隠す"という意味ですか? 「Promise.resolve」は確かにそれをしません。しかし、あなたの 'catch()'呼び出しは可能性があります。 – Bergi

答えて

1

Promise.resolveは、エラーを伝播ありません。あなたの問題は、resolveに達する前にcatchが処理されているようです。あなたはすべきである

function count(params, done){ 
    return Promise.resolve(client.count({ 
    "index": config.search.index + "_" + params.index 
    })).then(function(response){ 
    logger.debug(response); 
    return response; // important! 
    }, function(e){ 
    logger.error(e); 
    throw e; // important! 
    }).asCallback(done); 
} 
+0

おそらく、それは親の約束の中にあるものです。私はちょうど私のコード例が実際に悪いので、それをトラブルシューティングするためにキャッチを追加しました。私は再チェックさせてください。 –

+0

私はそれが親チェーンハンドラの私の部分では単なるエラーだと思う。私はまだ約束を正しく使う方法を学んでいます... –

関連する問題