Рассмотрим этот код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
@JLRishe updated, это была единственная разница, которую я опустил для краткости – Raston