当前位置:网站首页>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);
}
);

边栏推荐
- MySQL |子查询
- paging
- wsl操作
- STM32CubeMX configuration to generate FreeRTOS project
- 论文阅读:SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers
- Unity 锁定相机第二弹
- 软考 系统架构设计师 简明教程 | 案例分析 | 需求分析
- [100 Solidity Skills] 1. Contract reentrancy attack
- The method of parameter passing
- flowable workflow all business concepts
猜你喜欢

Materialist Dialectics - Conditionalism

PyQt5 - draw sine curve with pixels

Neural Ordinary Differential Equations

Re19: Read the paper Paragraph-level Rationale Extraction through Regularization: A case study on European Court

Multi-threading scheme to ensure that a single thread opens a transaction and takes effect

第2章 常用安全工具

你真的懂Redis的5种基本数据结构吗?

mysql安装教程【安装版】

梅科尔工作室-看鸿蒙设备开发实战笔记七——网络应用开发

nacos实战项目中的配置
随机推荐
【 HMS core 】 【 】 the FAQ HMS Toolkit collection of typical questions 1
OC-ARC(Automatic Reference Counting)自动引用计数
梅科尔工作室-看鸿蒙设备开发实战笔记五——驱动子系统开发
Re19:读论文 Paragraph-level Rationale Extraction through Regularization: A case study on European Court
梅科尔工作室-看鸿蒙设备开发实战笔记四——内核开发
WEB3之路(一)-- solidity学习笔记
【C和指针第七章】可变参数列表
MySQL installation tutorial [installation version]
Always remember: one day you will emerge from the chrysalis
OC - Manual Reference Counting Memory Management
[AGC] Growth Service 2 - In-App Message Example
kubernetes的一些命令
分页 paging
Drag and drop events, dataTransfer, getBoundingClientRect
MFCC转音频,效果不要太逗>V<!
Domino Server SSL Certificate Installation Guide
Selected System Design | Design of CAN Bus Controller Based on FPGA (with Code)
MySQL |子查询
Soft test system architects introductory tutorial | system operation and software maintenance
MySQL | Subqueries