Betrachten Sie diesen CodeQ Versprechen Verkettungs, Fehlerbehandlung nicht genannt
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));
};
Und rufen:
tryWithoutReindexing(indexName, newProperties)
.then(function success(value){
console.log('migration successful');
}, function error(){
console.log('migration unsuccessful');
});
Methode elastic.putSettings
Fehler wirft, aber aus irgendeinem Grund, console
Protokolle 'migration is successful'
. Ich würde erwarten, Fehler-Handler aufgerufen werden.
Wenn ich Methode dies zu ändern:
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));
};
und setzte Haltepunkt in Zeile console.log(error);
, wird die Fehler-Handler aufgerufen, so scheint es, dass putSettings Methode richtig funktioniert.
Kann mir jemand erklären, warum das erste Beispiel keinen Fehler in der Versprechungskette behandelt?
Es scheint nicht, dass Sie uns Ihren tatsächlichen Code zeigen. Ihre alternative Version der Methode hat Zeilen, die 'settings' und' mappings' zuweisen, während Ihre erste Version dies nicht hat, aber immer noch diese Variablen verwendet. Bitte zerlegen Sie Ihren Code auf etwas, das das Problem tatsächlich verursacht, aber Sie können hier unmodifiziert kopieren. Wir müssen tatsächlichen Code sehen, weil der Teufel im Detail ist. – JLRishe
@JLRishe aktualisiert, das war der einzige Unterschied, den ich zur Kürze weggelassen habe – Raston