gpt4 book ai didi

javascript - 从函数值中打破 promise 图?

转载 作者:行者123 更新时间:2023-11-30 00:25:49 24 4
gpt4 key购买 nike

在下面的示例代码中,您可以看到我有一个正在映射的函数链,以及何时何地抛出错误时链退出。全局 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 映射中插入错误并抛出该错误以中断映射链?

是否有另一种 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"
})

关于javascript - 从函数值中打破 promise 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31481958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com