在下面的示例代码中,您可以看到我有一系列正在映射的函数,以及何时以及何时抛出错误,退出链。全局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"
})
然而,当我在map函数中打开promise并插入有条件抛出的错误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"
})
如何在promise图中插入错误并抛出该错误打破地图链?
是否有另一种蓝鸟方法可以连续运行一系列承诺?
答案 0 :(得分:1)
这里的答案是使用each
代替map
。
var x = "foo"
Promise.each([
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"
})