18910140161

使用Async.js简化你的JavaScript代码

顺晟科技

2021-06-16 10:47:25

204

异步。射流研究…是一个功能强大的库,主要是基于Node.js开发,他本身也是Java脚本语言代码,在网浏览器中也可以单独使用,它可以简化Node.js异步操作的书写,使代码更容易被读懂。

安装异步。射流研究…

我们可以使用Node.js的包管理器新公共管理直接安装它,在壳中输入:

新公共管理安装异步

或者更改package.json文件,自定义安装的细节:

{

名称' : '应用程序名称,

版本' : '0.0.1 ',

private': true,

脚本' : {

启动":"节点/bin/www '

},

依赖项' : {

.

异步' :'~0.9.0 '

}

}

然后运行新公共管理安装安装完成后,在需要使用它的文件中加入:

var async=require(' async ');

系列

使用系列可以简化流程运行的异步函数,现在构想一个这样的场景,我需要执行一组动作,喝水-吃饭-打开电脑,通常的代码编写应该这样:

function normalFunc() {

console.log('正常功能运行');

饮用水(功能(错误,数据){

if(错误){

console.log('error: ',错误,' msg: ',数据);

} else {

console.log('喝水完,我就吃东西');

eatFood(函数(错误,数据){

if(错误){

console.log('error: ',错误,' msg: ',数据);

} else {

console.log('吃完饭,我就开MAC ');

openMac(函数(错误,数据){

if(错误){

console.log('error: ',错误,' msg: ',数据);

} else {

//打开老兄后做点什么

console.log('Mac打开,所有操作完成');

}

});

}

});

}

});

}

当异步调用超过两次嵌套,代码会变得不直观。使用异步系列可以优化:

函数seriesFunc() {

async.series([

函数(回调){

控制台。日志(“系列函数运行”);

饮用水(功能(错误,数据){

回调(错误,数据);

});

},

函数(回调){

console.log('喝水完,我就吃东西');

eatFood(函数(错误,数据){

回调(错误,数据);

});

},

函数(回调){

console.log('吃完饭,我就开MAC ');

openMac(函数(错误,数据){

回调(错误,数据);

});

}],

函数(错误,结果){

if(错误){

console.log('error: ',错误,' msg: ',结果);

}

else {

console.log('Mac打开,所有操作完成');

}

}

);

}

为了测试这个例子,我编写三个函数:

函数饮用水(回调){

回调(null,null);

}

函数eatFood(回调){

回调(null,null);

}

函数openMac(回调){

回调(null,null);

}

接下来,我们测试这些函数,在安慰中的显示是下面的代码:

正常功能运行

喝完水,我会吃东西

吃完饭,我会打开苹果

苹果个人计算机打开,所有动作完成

系列函数运行

喝完水,我会吃东西

吃完饭,我会打开苹果

苹果个人计算机打开,所有动作完成

这样看,我们达到了相同的效果。我们再测试出错的情况,将openMac函数更改成下面的代码:

函数openMac(回调){

回调(1,'我找不到我的MAC ');

}

再测试这两个函数:

正常功能运行

喝完水,我会吃东西

吃完饭,我会打开苹果

错误: 1 msg:找不到我的老兄

系列函数运行

喝完水,我会吃东西

吃完饭,我会打开苹果

错误: 1 msg: [空,空,'我找不到我的mac' ]

我们能发现系列的结果是一个数组系列中的回收被执行后,无论动作的结果是成功还是失败,都会在结果中添加一个数据。另一方面,我们也可以通过结果中元素的数量,判断系列执行了几个函数。

瀑布

另一个有用函数是瀑布。它和系列一样,可以简化流程运行的异步函数。不同点是它可以在流程执行的过程中传递参数。

例如,我需要在异步函数中返回一些饮品或食物的信息,我需要更改

函数饮用水(回调){

回调(空,'可乐');

}

函数eatFood(回调){

回调(空,“汉堡”);

}

函数openMac(回调){

回调(null,' chrome _ 6494 _ 1。html ' target=' _ blank ' Chrome ');

}

然后添加:

函数waterFunc() {

异步。瀑布([

函数(回调){

控制台日志("瀑布运行");

饮用水(功能(错误,数据){

回调(错误,数据);

});

},

函数(数据,回调){

console.log('饮料,数据,'吃完,我就吃东西');

eatFood(函数(错误,数据){

回调(错误,数据);

});

},

函数(数据,回调){

console.log('eat ',data,' finish,我来开MAC ');

openMac(函数(错误,数据){

回调(错误,数据);

});

}],

函数(错误,结果){

if(错误){

console.log('error: ',错误,' msg: ',结果);

}else {

console.log('Mac ',结果,'打开,所有操作完成');

}

}

);

}

每一次运行函数的回调结果都会传给下一个动作,最后的结果与系列不同,是最后一次执行动作回收中传递的值。运行测试结果为:

瀑布跑

喝完可乐,我会吃东西

吃完汉堡,我会打开苹果

苹果铬打开,所有动作完成

然后再来测试出错的情况,更改:

函数eatFood(回调){

回调(1,'钱不够');

}

再运行的结果是:

瀑布跑

喝完可乐,我会吃东西

错误: 1 msg:钱不够

总结

使用Node.js中的异步非同步(异步)可以将复杂的逻辑表现的更直观。但如果逻辑只有一次回调,就不建议使用异步非同步(异步)了,我认为这会无意义的增加一些运行的成本。

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航