async的一点疑惑
我的目的是顺序执行a、b、c三个方法,因为b依赖方法a返回的数值,c又依赖b返回的数值。 我的代码是这样的
async.series([
function (callback) {
session = sessionUtils.getSession();
console.log('1');
callback(null, 'one');
},
function (callback) {
picUtils.downloadVC2(session);
console.log('2');
callback(null, 'two');
},
function (callback) {
read();
console.log('3');
callback(null, 'three');
}
],
function (err, results) {
if (err)console.log(err);
});
理论上来说不是应该输出 “数据库连接成功,获取session" 和 “1”, ”验证码下载成功“ 和“2”, “请输入验证码”和”3“。 可是结果却是 这是为什么呢?
10 回复
用的不对吧,async.series 看api说明好像是”多个函数依次执行,之间没有数据交换“,应该用waterfall或者auto
你的需求应该用waterfall吧
@nichbar 可以说是的,异步操作完成后再callback,另外异步操作的返回值通常是通过回调返回的,不能直接赋值。看你这个getSession很可能是一个异步操作吧,如果是,你这么写就是不对的。
@nichbar 改成这样试试,不知道行不行。虽然不是完美的解决版本
function (callback) {
session = sessionUtils.getSession(functin(error,reply){
console.log('1');
callback(null, 'one');
});
},
@nichbar 一般有I/O就会是异步,我猜测你这段代码应该这么写吧。。。
function (callback) {
sessionUtils.getSession(function(error, session){
console.log("1");
if(error == null) {
callback(null, session);
}else{
callback(error, null);
}
});
}
感觉你并不理解异步,建议可以先了解异步,在不使用async的情况下写出正确的代码,再考虑使用async、promise之类的进行代码质量的改良。
为嘛我到现在只用过waterfall parallel
7楼正解,而且这种情况确实应该使用waterfall而不是series