如何在 async.waterfall 中调用 promise().then() 中的 cb()



如何在调用在 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
} ])

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

回调中的第一个参数也保留给 Error。所以当这一行被执行时

cb("ERROR-25")

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

现在来问"不能调用cb((,它失去了范围"。如果check_networkcb 被调用

如下
cb(null, "value1");

process_pay的相应定义如下:

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

此处参数 1 将是"值 1"。

最终代码应如下所示

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
})

有关异步瀑布的更多信息,请访问此链接

相关内容

  • 没有找到相关文章

最新更新