从函数值中打破承诺图?
Break promise map from within function value?
在下面的示例代码中,您可以看到我有一个正在映射的函数链,以及何时何地抛出错误时链退出。全局 x
的值从第一个函数设置为 bar
但它没有从第三个函数设置为 baz
因为它永远不会 运行s.
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 映射中插入错误并抛出该错误来破坏映射链?
有没有另一种bluebird方法可以运行一系列promise?
这里的答案是使用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"
})
在下面的示例代码中,您可以看到我有一个正在映射的函数链,以及何时何地抛出错误时链退出。全局 x
的值从第一个函数设置为 bar
但它没有从第三个函数设置为 baz
因为它永远不会 运行s.
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 映射中插入错误并抛出该错误来破坏映射链?
有没有另一种bluebird方法可以运行一系列promise?
这里的答案是使用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"
})