js异步执行
来源:互联网 发布:中小企业办公软件 编辑:程序博客网 时间:2024/05/14 03:07
function(path,callback){ fs.readdir(path,function(err,files){ if(err) { callback(err); return; } var result=[]; for(var i=0;i<</span>files.length;i++)//这个for想将指定目录下的非文件夹给剔除 //只保留文件夹名到result中 { fs.stat(path+"/"+files[i],function(err,stats){ if(stats.isDirectory()) result.push(files[i]); } callback(null,result); ) } }) }
例子中for 循环里有一个回调函数,在主函数执行过程中回调函数走异步执行。当i等于files.length时,主函数循环跳出,里面的回调函数有可能还在执行过程中。所以result 得不到想要的值。
这里我们需要用到 async模块
waterfall,顾名思义,像流水线一样有序执行,waterfall每个函数产生的值,都将传给下一个函数:
另外需要注意的是 waterfall 的 tasks 参数只能是数组类型。当中途有函数出错,其err直接传给最终callback,结果被丢弃,后面的函数不再执行。
async.waterfall([ function(callback){ callback(null, 'one', 'two'); }, function(arg1, arg2, callback){ // arg1 now equals 'one' and arg2 now equals 'two' callback(null, 'three'); }, function(arg1, callback){ // arg1 now equals 'three' callback(null, 'done'); }], function (err, result) { // result now equals 'done' console.log(result);});
async.waterfall(
[function(callback)
{
vara=5;console.log('OK1');
setTimeout(function(){callback(null,a*2)},1000);
setTimeout(function(){callback(null,a*2)},1000);
},
function(data,callback)
function(data,callback)
{
console.log('OK2');
setTimeout(function(){callback(null,data+7,data)},2000);
},
function(result1,result2,callback)
function(result1,result2,callback)
{
console.log('OK3');
setTimeout(function(){callback(null,result1-9,result2)},3000);
}
],function(err,kk,jj)
],function(err,kk,jj)
{
console.log(kk);console.log(jj);
})
parallel(tasks, [callback])
parallel函数是并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。传给最终callback的数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序,示例如下:
async.parallel([ function(callback){ callback(null, 'one'); }, function(callback){ callback(null, 'two'); }],function(err, results){});
parallelLimit(tasks, limit, [callback])
parallelLimit函数和parallel类似,但是它多了一个参数limit。limit参数限制任务只能同时并发一定数量,而不是无限制并发,示例如下:
async.parallelLimit([
function(callback){ callback(null, 'one'); }, function(callback){ callback(null, 'two'); }],2,function(err, results){ console.log(results);});
series函数 串行执行
它的作用就是按照顺序一次执行。
async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); }},function(err, results) { console.log(results);});
输出:{one: 1, two: 2}
0 0
- JS异步执行
- js异步执行
- js异步执行机制
- Node.js中的异步执行
- JS异步执行实例代码
- 异步加载js并执行js方法
- js执行顺序和js异步
- 异步加载js和异步执行js的方法
- setTimeout与js引擎的异步执行
- setTimeout与js引擎的异步执行
- setTimeout与js引擎的异步执行
- js异步加载与执行1
- js 异步和事件的执行问题
- Nightwatch.js 异步中调用等待执行
- js文件引用方式及其同步执行与异步执行
- 异步执行
- 异步执行
- 异步执行
- C#调用Microsoft.DirectX.DirectSound问题记录及解决
- xcopy dos复制
- nodejs package.json
- lodash forEach
- (七)angular表单demo
- js异步执行
- ojdbc 添加到maven
- ClassLoader ?ResourceLoader
- MarkDown
- RasGetProjectionInfoEx
- Java微信二次开发之18-在线查询歌曲
- Tomcat学习总结(8)——Tomcat+Nginx集群解决均衡负载及生产环境热部署
- Xp下安装Ubuntu 14.04
- 909422229__XML语言的学习