gpt4 book ai didi

javascript - 如何在 async.waterfall 中调用 Promise().then() 内的 cb()

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:31 24 4
gpt4 key购买 nike

如何在调用 .then 时在 Promise 内的 async.waterfall 中调用 cb()

请看下面的代码

async.waterfall([
function check_network(cb) {

cb("ERROR-25", "foo") //<<----- This works
},
function process_pay(cb){
somePromise().then((status)=>{
if(status){
cb(null, status) //<<----ERROR---- can't call cb() it looses the scope
}
cb("ERROR-26") //<<--ERROR------ Same issse as above
})
},
function print(cb){
//some code
} ])

最佳答案

在 waterfall 函数中:结果值作为参数按顺序传递到下一个任务。

回调中的第一个参数也是为错误保留的。所以当执行这一行时

cb("ERROR-25")

这意味着抛出了错误。所以下一个函数将不会被调用。

现在讨论问题“无法调用 cb() 它会失去范围”。如果 check_network cb 被调用如下

cb(null, "value1");

process_pay的相应定义应如下:

function process_pay(argument1, cb){    
somePromise().then((status)=>{
if(status){
cb(null, status)
}
cb("ERROR-26")
})
}

此处 argument1 将是'value1'

最终代码应该类似于

async.waterfall([
function check_network(cb) {
// if error
cb("ERROR-25") // Handled at the end
// else
cb(null, "value1") // Will go to next funtion of waterfall
},
function process_pay(arg1, cb){
somePromise().then((status)=>{
if(status){
cb(null, status) // cb will work here
}
cb("ERROR-26") // Error Handled at the end
})
},
function print(arg1, cb){
//some code
}
], function(error, result){
// Handle Error here
})

有关异步 waterfall 的更多信息,请访问此 link

关于javascript - 如何在 async.waterfall 中调用 Promise().then() 内的 cb(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51946177/

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