如何在 async.waterfall 中调用 promise().then() 中的 cb()
How to call a cb() inside promise().then() in async.waterfall
如何在调用 时在 async.waterfall 中调用 cb() 中的 promise。然后
请看下面的代码
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
} ])
在瀑布函数中:结果值按顺序作为参数传递给下一个任务。
回调中的第一个参数也是为错误保留的。所以当这一行被执行时
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")
})
}
此处参数 1 将是 '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
})
有关异步瀑布的更多信息,请转到此 link
如何在调用 时在 async.waterfall 中调用 cb() 中的 promise。然后
请看下面的代码
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
} ])
在瀑布函数中:结果值按顺序作为参数传递给下一个任务。
回调中的第一个参数也是为错误保留的。所以当这一行被执行时
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")
})
}
此处参数 1 将是 '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
})
有关异步瀑布的更多信息,请转到此 link