想利用async库将一异步函数foo(param, callback)封装为带返回值的同步函数,但试了async库的serialize、waterall等都不能实现我的想法。例子代码如下:
function myFunc() { var ret = false; async.series([ function (callback){ foo (param, fuction () { ret = true; console.log(“111111”); callback(null, null); }); } ], function (err, results) { });
console.log(“222222”);
return ret;
}
以上函数运行结果总是返回false和打印顺序是: 222222 111111
而我希望能将异步函数阻塞后变为同步函数,希望返回true和打印顺序是: 111111 222222
请教大家, 是否有解决方法?
谢谢hexie. 我用async.whilst试了, 效果和async.serialize一样, 也不行! 代码如下:
function myFunc() { var ret = false; async.whilst( function () { return !ret }, function (callback) { foo(param, fuction () { console.log(“111111”); ret = true; callback(null); }); }, function (err) { } ); console.log(“222222”); return ret; }
用了async也不可能让js执行变阻塞 async只是提供了一种包装,把的代码扔进这种包装,就可以按照包装的指定顺序来执行你的代码 前提是你的相关的逻辑都要放进去包装,不能console.log(‘1111111’)用async控制,console.log(‘2222222’)而不使用async控制 多看看async的demo吧,理解async的工作原理后,再进行编码,没理解原理就使用,当然会有问题 ttps://github.com/alsotang/async_demo