分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

nodejs异步---Async

发布时间:2023-09-06 01:10责任编辑:蔡小小关键词:jsnodejs

一:异步基础

1.由于node.js天生就是异步,所以效率很高,性能强。

console.log(‘hi!‘);setTimeout(function(){ ??console.log(‘hello!‘);},1000);console.log(‘wow!‘);

比如这个,输出结果:hi

                                    wow!

                                  hello!

可以看出nodejs的异步性

2.高阶函数

高阶函数给我的感觉就是闭包。

function test(a){ ???return function(b){ ???????return a+b; ???}}var q=test(2)(3);console.log(q);

返回值是一个函数,函数作为参数传递。

3.偏函数----------个人理解就是闭包

假设有一个参数或变量已经预置的函数A,我们通过调用A来产生一个新的函数B,函数B就是我们说的偏函数

function test(a){ ???return function(b){ ???????console.log(a+" say "+b); ???}}var q=test("tom")("hello");

偏函数:一个创建函数的工厂函数;通过指定部分参数,定制新的函数。

但是两个都是闭包的一种。

二.Async异步

首先安装async-----这个就不多说

npm install async

1.series(tasks,callback)

var async=require("async");async.series({ ???one: function(callback){ ???????callback(null,1) ?; ???}, ???two: function(callback){ ???????callback(null,2) ; ???}},function(err, results) { ???console.log(results)});

这样会按照写入顺序依次执行各个函数,结果是一个集合{ one: 1, two: 2 }

注意:series函数的第一个参数可以是一个数组也可以是一个JSON对象,参数类型不同,影响的是返回数据的格式

2,waterfall(tasks,callback)

var async=require("async");async.waterfall([ ???function(callback){ ???????//task1 ???????callback(null,1); ???},function(data,callback){ ???????console.log(data); ???????callback(null,2); ???}],function(err,results){ ???console.log(results);});

 和series()函数一样,会依次执行各个函数,但是每一个函数执行成功后产生的值传给下一个函数,而不是results

注意:waterfall的tasks参数只能是数组类型。

3.parallel函数(tasks,callback)

var async=require("async");async.parallel([ ???????function(callback){ ???????????callback(null, ‘one‘); ???????}, ???????function(callback){ ???????????callback(null, ‘two‘); ???????} ???], ???function(err, results){ ???????????console.log(results); ???});

  parallel函数是并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。 传给最终callback的数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序

注意:tasks参数可以是一个数组或是json对象,和series函数一样,tasks参数类型不同,返回的results格式会不一样。

4.parallelLimit(tasks,limit,callback)

var async=require("async");async.parallelLimit([ ???????function(callback){ ???????????setTimeout(function(){ ???????????????callback(null, ‘one‘); ???????????}, 3000); ???????}, ???????function(callback){ ???????????setTimeout(function(){ ???????????????callback(null, ‘two‘); ???????????}, 1000); ???????} ???], ???2,//设置同时执行的函数个数 ???function(err, results){ ???????console.log(results); ???});

如果limit是1的话,那么4S执行完毕,如果limit是2,那么3S解决完毕。

5.whilst(test,fn,callback)

test参数是一个返回布尔值结果的函数,通过返回值来决定循环是否继续,作用等同于while循环停止的条件.

var async = require(‘async‘);var j = 0;async.whilst( ???function(){ ???????return j<3; ???}, ???function(callback){//记得此处应该有回调函数 ???????j++; ???????console.log(‘whileCb‘+j); ???????callback(); ???}, ???function(err){ ???})

 callback()就是达到了条件就会循环。

6.iterator(tasks)

var iter = async.iterator([ ???function(){console.log(‘111‘);}, ???function(){console.log(‘222‘);}, ???function(){console.log(‘333‘);}]);var it1 = iter();it1();

 这个感觉很重要,但是目前理解不够,正在学习!

本博客相当于课程笔记吧!

/*async课程:http://www//com/course/543e1a4f032c7816c0d5dfa1

//内容是.hubwiz.
*/

  

nodejs异步---Async

原文地址:http://www.cnblogs.com/lilight/p/7512244.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved