В приведенном ниже примере кода вы видите, что у меня есть цепочка функций, которые отображаются, и когда и когда возникает ошибка, цепочка завершается. Значение глобального x
установлено на bar
из первой функции, но оно не установлено на baz
из третьего, потому что оно никогда не запускается.Перерыв обещание карта изнутри значения функции?
var x = "foo"
Promise.map([
function(){
x = "bar"
return true
},
function(){
throw new Error()
},
function(){
x = "baz"
return true
}
], function(fn){
return Promise.method(fn)()
})
.catch(function(e){
console.log(e) // [Error]
})
.then(function(){
console.log(x) // "bar"
})
Однако, когда я открываю обещание внутри функции карты и вставляю условно брошена ошибка x
изменяется на baz
, а третья функция не выполняется.
var x = "foo"
Promise.map([
function(){
x = "bar"
return true
},
function(){
return "bad value throw error"
},
function(){
x = "baz"
return true
}
], function(fn){
return Promise.method(fn)().then(function(val){
if(val == "bad value throw error") throw new Error()
return val
})
})
.catch(function(e){
console.log(e) // [Error]
})
.then(function(){
console.log(x) // "baz"
})
Как я могу вставить ошибку в карту обещаний и выбросить эту ошибку, нарушая цепочку карт?
Есть ли другой метод bluebird, который может запускать ряд обещаний в серии?
Если вы хотите запускать функции в * parallel *, почему вы ожидаете, что они перестанут работать еще до того, как будет сброшена ошибка? – Bergi
Это опечатка, которую я хочу, чтобы они запускались в серии. – ThomasReggi
Да, используйте опцию '{concurrency: 1}'. – Bergi