呼ばれないエラーハンドラは、このコードQ約束チェーン、
var tryWithoutReindexing = function(indexName, properties) {
var settings = properties["settings"];
var mappings = properties["mappings"];
return elastic.closeIndex(indexName)
.then(elastic.putSettings(indexName, settings))
.then(elastic.putMapping(indexName, mappings))
.then(elastic.openIndex(indexName));
};
、コール考えてみましょう:
tryWithoutReindexing(indexName, newProperties)
.then(function success(value){
console.log('migration successful');
}, function error(){
console.log('migration unsuccessful');
});
をメソッドelastic.putSettings
でエラーが発生しますが、いくつかの理由で、console
ログ'migration is successful'
ため。エラーハンドラが呼び出されると思います。
私はこれまでの方法を変更する場合:
var tryWithoutReindexing = function(indexName, properties) {
var settings = properties["settings"];
var mappings = properties["mappings"];
return elastic.closeIndex(indexName)
.then(elastic.putSettings(indexName, settings))
.then(function success() {
console.log('err');
}, function(error) {
console.log(error);
})
.then(elastic.putMapping(indexName, mappings))
.then(elastic.openIndex(indexName));
};
、およびラインconsole.log(error);
にブレークポイントを入れて、エラーハンドラが呼び出されるので、putSettingsメソッドが正しく動作するように思われます。
誰も私の最初の例では、約束のチェーンで発生したエラーを処理しない理由を説明できますか?
実際のコードを表示しているようではありません。あなたの代わりのバージョンのメソッドは、 'settings'と' mappings'を割り当てる行を持っていますが、あなたの最初のバージョンはこれを持っていませんが、それらの変数を使います。実際に問題を引き起こすものにあなたのコードを貼り付けてください。ただし、ここにそのままコピーすることができます。悪魔が細部にいるので実際のコードを見る必要があります。 – JLRishe
@JLRheheが更新されました。これは簡潔さのために省略した唯一の違いです。 – Raston