我有一个如下所示的异步功能。请注意,超时功能只是以异步方式运行的其他代码的象征。我希望代码在返回到最终函数之前等待每个系列块完成。
var async = require('async')
var param1 = 'foobar'
function withParams(param1, callback) {
console.log('withParams function called')
console.log(param1)
callback()
}
function withoutParams(callback) {
if(true){
console.log("withoutParams function called")
setTimeout(function () {
console.log("test") }, 10000);
callback()
}
else{
console.log('This part will never run')
callback()
}
}
async.series([
function(callback) {
withParams(param1, callback)
},
withoutParams
], function(err) {
console.log('all functions complete')
})
输出
withParams function called
foobar
withoutParams function called
all functions complete
test
我希望输出为
withParams function called
foobar
withoutParams function called
test
all functions complete
是否还有其他异步版本在调用结束function(err){...
部分之前等待最后一个块完成?我正在学习nodejs。
答案 0 :(得分:1)
您只需移动callback
:
function withoutParams(callback) {
if(true){
console.log("withoutParams function called")
setTimeout(function () {
console.log("test")
callback() // <-- HERE
}, 1000);
}
else{
console.log('This part will never run')
callback()
}
}
当然,只需使用promises就可以在没有async
库的情况下获得相同的结果:
var param1 = 'foobar'
function withParams(param1) {
console.log('withParams function called')
console.log(param1)
}
function withoutParams() {
return new Promise((resolve, reject) => {
if (true) {
console.log("withoutParams function called")
setTimeout(function() {
console.log("test")
resolve()
}, 1000);
} else {
console.log('This part will never run')
reject()
}
})
}
withParams(param1)
withoutParams()
.then(() => console.log('all functions complete'))