我的目的是顺序执行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)
R
引用 nichbar@raymonife 是的,getSession是一个网络请求,在回调里把数据返回,那应该怎么修改使得网络请求结束返回值是个不是异步操作呢?
@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之类的进行代码质量的改良。
I
用的不对吧,async.series 看api说明好像是”多个函数依次执行,之间没有数据交换“,应该用waterfall或者auto
B
你的需求应该用waterfall吧
N
引用 im-here用的不对吧,async.series 看api说明好像是” 多个函数依次执行,之间没有数据交换 “,应该用waterfall或者auto
@imhered waterfall 也是一样的情况,会不会是因为我方法1是一个request的网络请求里面又有一个回调造成的呢?
R
引用 nichbar@imhered waterfall 也是一样的情况,会不会是因为我方法1是一个request的网络请求里面又有一个回调造成的呢?
@nichbar 可以说是的,异步操作完成后再callback,另外异步操作的返回值通常是通过回调返回的,不能直接赋值。看你这个getSession很可能是一个异步操作吧,如果是,你这么写就是不对的。
N
引用 raymonife@nichbar 可以说是的,异步操作完成后再callback,另外异步操作的返回值通常是通过回调返回的,不能直接赋值。看你这个getSession很可能是一个异步操作吧,如果是,你这么写就是...
@raymonife 是的,getSession是一个网络请求,在回调里把数据返回,那应该怎么修改使得网络请求结束返回值是个不是异步操作呢?
I
引用 nichbar@imhered waterfall 也是一样的情况,会不会是因为我方法1是一个request的网络请求里面又有一个回调造成的呢?
@nichbar 改成这样试试,不知道行不行。虽然不是完美的解决版本
function (callback) {
session = sessionUtils.getSession(functin(error,reply){
console.log('1');
callback(null, 'one');
});
},
N
B
为嘛我到现在只用过waterfall parallel
D
7楼正解,而且这种情况确实应该使用waterfall而不是series
参与回复
登录后即可参与回复。登录