当前位置:网站首页>async.js入门
async.js入门
2022-07-30 10:14:00 【地图学】
Async 是一个实用模块,它为使用异步 JavaScript 提供了直接、强大的功能。虽然最初设计用于Node.js,但它也可以直接在浏览器中使用。
安装
npm install --save async
使用
async的常用方法有series、parallel、waterfall、auto
1. series
依次运行tasks集合中的函数,每个函数在前一个函数完成后运行。如果系列中的任何函数将错误传递给其回调,则不再运行任何函数,并callback立即使用错误的值调用。否则,在完成后callback 接收结果数组。
const async =require("async");
async.series([
function(callback){
callback(null,'1')
},
function(callback){
callback(null,'2');
}
],function(err,result){
console.log(err);
console.log(result);
});
运行结果:
注意当Task的err参数不为空时,执行完当前,后边不再执行
const async =require("async");
async.series([
function(callback){
callback("err",'1')
},
function(callback){
callback(null,'2');
}
],function(err,result){
console.log(err);
console.log(result);
});
结果如下:
2.parallel
并行运行tasks函数集合,无需等到前一个函数完成。如果任何函数将错误传递给其回调,callback则会立即使用错误值调用 main。一旦tasks完成,结果将 callback作为数组传递给最终结果。
注意: parallel是关于并行启动 I/O 任务,而不是关于代码的并行执行。如果您的任务不使用任何计时器或执行任何 I/O,它们实际上将被串行执行。每个任务的任何同步设置部分都将一个接一个地发生。JavaScript 仍然是单线程的。
提示:用于reflect在任务失败时继续执行其他任务。
例如:
const async=require('async');
async.parallel([
function(callback){
setTimeout(()=>{
console.log("first Task");
callback(null,"1");
},1000)
},
function(callback){
setTimeout(()=>{
console.log("second Task");
callback(null,"2");
},100)
}
],function(err,result){
console.log(err);
console.log(result);
});
结果如下:
分析:
结果保持task添加顺序,而执行是异步的。
当发生错误时,立即调用完成函数,仍会把所有task执行完毕。
const async=require('async');
async.parallel([
function(callback){
setTimeout(()=>{
console.log("first Task");
callback(null,"1");
},1000)
},
function(callback){
setTimeout(()=>{
console.log("second Task");
callback("err","2");
},100)
}
],function(err,result){
console.log(err);
console.log(result);
});
结果:
3.waterfall
依次运行tasks函数数组,每个函数将其结果传递给数组中的下一个。但是,如果任何tasks一个将错误传递给他们自己的回调,则不会执行下一个函数,并且callback会立即调用 main 并返回错误
const async=require('async');
async.waterfall([
function(callback){
setTimeout(()=>{
callback(null,1,2)
},3000)
},
function(param1,param2,callback){
setTimeout(()=>{
//console.log(param1,param2);
callback(null,3)
},100)
}
],
function(err,result){
console.log(err);
console.log(result);
})
结果如下:
分析:
result返回的是最后Task的结果
4.auto
根据要求确定运行AsyncFunction的最佳顺序tasks。每个功能可以选择依赖于其他功能先完成,并且每个功能在满足其要求后立即运行。
如果任何AsyncFunction将错误传递给它们的回调,则auto序列将停止。进一步的任务将不会执行(因此任何其他依赖于它的函数都不会运行),并且callback会立即调用 main 并显示错误。
例如:
const async=require('async');
async.auto(
{
func1:function(callback){
setTimeout(()=>{
callback(null,'func1');
},3000)
},
func2:function(callback){
callback(null,'func2');
},
func3:["func1",function(param1,callback){
callback(null,'func3')
}]
},
function(err,result){
console.log(err,result);
}
);
结果如下:
中间能获取当前运行结果参数
const async=require('async');
async.auto(
{
func1:function(callback){
setTimeout(()=>{
console.log('func1');
callback(null,'func1');
},3000)
},
func2:function(callback){
console.log('func2')
callback(null,'func2');
},
func3:["func1",function(param1,callback){
console.log("param1:"+JSON.stringify(param1))
console.log('func3')
callback(null,'func3')
}]
},
function(err,result){
console.log(err,result);
}
);

边栏推荐
猜你喜欢

MFCC转音频,效果不要太逗>V<!
![[AGC] Growth Service 2 - In-App Message Example](/img/fa/9190e45c1532aec908a6c68706629a.png)
[AGC] Growth Service 2 - In-App Message Example

第1章 Kali与靶机系统

第3章 信息收集

在机器人行业的专业人士眼里,机器人行业目前的情况如何?

多线程--线程和线程池的用法

神经网络学习笔记3——LSTM长短期记忆网络

RandLA-Net复现记录

(***Key points***) Flink common memory problems and tuning guide (1)

4、yolov5-6.0 ERROR: AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘ 解决方案
随机推荐
Re20:读论文 What About the Precedent: An Information-Theoretic Analysis of Common Law
Security tip: FreeType in Qt
MySQL | Subqueries
paging
类和对象—6个默认成员函数
spark udf 接受并处理 null值.
4. yolov5-6.0 ERROR: AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor' solution
idea2021+Activiti [the most complete note one (basic use)]
Re19: Read the paper Paragraph-level Rationale Extraction through Regularization: A case study on European Court
JCL 学习
Flask之路由(app.route)详解
Redis Desktop Manager 2022.4.2 发布
PyQt5 - Drawing different types of straight lines
从数据流中快速查找中位数
flowable工作流所有业务概念
Database dirty reads, non-repeatable reads, phantom reads and corresponding isolation levels
Quick Start Tutorial for flyway
Do you really understand the 5 basic data structures of Redis?
BERT预训练模型系列总结
在机器人行业的专业人士眼里,机器人行业目前的情况如何?