我的编程空间,编程开发者的网络收藏夹
学习永远不晚

js怎么实现异步串行与异步并行

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

js怎么实现异步串行与异步并行

本篇内容主要讲解“js怎么实现异步串行与异步并行”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么实现异步串行与异步并行”吧!

js异步处理方案,js的异步串行与异步并行

一、什么是串行,并行,并发

串行:这个就像队列一样,一个执行完,下一个再执行,比如js同步执行

并发:是指这个系统拥有处理多个任务的能力,在一定时间发出,不需要同时性执行。js的异步消息队列让js拥有并发的能力

比如执行多个settimeout 它会挂载在消息队列,然后依次执行

并行:是指这个系统拥同时处理多个任务的能力,属于多线程的一种方式,而js是属于单线程 虽然可以通过worker来创建多线程,但是子线程

完全受主线程控制,没有改变JavaScript单线程的本质

串行示意图:

js怎么实现异步串行与异步并行

有人会问,异步不是都在消息队列吗,不就是一个一个执行了吗?

举个例子,如果本身就是串行执行,那么你现在执行2给个任务,一个是5秒后打印console.log(1),一个是十秒后打印console.log(2)

按照串行应该是15秒执行完毕,但实际耗时是10秒,如上这是并发,

 console.time()        setTimeout(() => {            console.log(1)        }, 5000);        setTimeout(() => {            console.log(2)            console.timeEnd()        }, 10000);

js怎么实现异步串行与异步并行

二、实现异步串行

大多时候我们可以用 promise 和async await来解决

promise

比较少的时候,可以用.then来实现串行

  var a = function() {            return new Promise((resolve, reject) => {                setTimeout(() => {                    consloe.log('a')                    resolve('a')                }, 3000)            })        }        var b = function() {            return new Promise((resolve, reject) => {                setTimeout(() => {                       consloe.log('b')                    resolve('b')                }, 2000)            })        };        console.time('test')        a().then((aa) => {            b().then((bb) => {                console.log(`${aa}-${bb}`)                console.timeEnd('test')            })        })

async await

我们改造一下,明显使用await看起来更加清晰

     var a = function() {            return new Promise((resolve, reject) => {                setTimeout(() => {                       consloe.log('a')                    resolve('a')                }, 3000)            })        }        var b = function() {            return new Promise((resolve, reject) => {                setTimeout(() => {                       consloe.log('b')                    resolve('b')                }, 2000)            })        };        (async () => {            console.time('test')            var aa = await a()            var bb = await b()            console.log(`${aa}-${bb}`)            console.timeEnd('test')        })()

但当我们有多个异步,比如2000个该如何

  var createPromise = function(time) {            // then中的回调函数             return (resolve, reject) => {                return new Promise((resolve, reject) => {                    setTimeout(() => { //模拟请求 (真实使用把time设置为0,将resolve传入异步函数中)                        console.log('timein' + time)                        resolve(); //在异步处理结束后resolve                    }, time * 1000)                })            }        }   var arr = [createPromise(2), createPromise(3), createPromise(1), createPromise(4), createPromise(5)]; function serpromise(arr) {            arr.reduce((pre, next, index, carr) => {                return pre.then(next)            }, Promise.resolve())        } // 相当于        // Promise.resolve().then(createPromise(2)).then(createPromise(1))......serpromise(arr)

async await

 var createPromise = function(time) {            return () => {                return new Promise((resolve, reject) => {                    setTimeout(() => { //模拟请求 (真实使用把time设置为0,将resolve传入异步函数中)                        console.log('timein' + time)                        resolve(); //在异步处理结束后resolve                    }, time * 1000)                })            }        }   var arr = [createPromise(2), createPromise(3), createPromise(1), createPromise(4), createPromise(5)];  var fn = async function(promiseArr) {            for (let i = 0, len = arr.length; i < len; i++) {                let currentPromise = promiseArr[i]                var result = await currentPromise()            }        }        fn(arr)

通过打印可以看出如过是并发的打印会是1,2,3,4,5

js怎么实现异步串行与异步并行

三、实现异步并行

并行示意图:

js怎么实现异步串行与异步并行

js并不能并行,我们只是可以思考如何卡在abc都执行完成,这里可以用promise.all 来轻松实现

 const a = new Promise((resolve, reject) => {                //模拟异步任务                setTimeout(function() {                    resolve('a');                }, 1000)            })            .then(result => result)            .catch(e => {            })        const b = new Promise((resolve, reject) => {                setTimeout(function() {                    // resolve('b');                    reject('Error in b');                }, 1000)            })            .then(result => result)            .catch(e => e)         Promise.all([a, b]).then(data => {                console.log('data', data)            })            .catch(e => console.log('erro', e));

这里需要注意的是,all能接受的 resolve reject都行,所以需要每个自己去处理异常

多个异步

promise

 var createPromise = function(time) {            return new Promise((resolve, reject) => {                setTimeout(() => {                    console.log('time', time);                    resolve(time)                }, time * 1000)            })        }        var arr = [createPromise(2), createPromise(3), createPromise(1), createPromise(4), createPromise(5)];        Promise.all(arr).then(data => {            console.log('data', data)        })

asnyc await

 var createPromise = function(time) {            return new Promise((resolve, reject) => {                setTimeout(() => {                    console.log('time', time);                    resolve(time)                }, time * 1000)            })        }        var arr = [createPromise(2), createPromise(3), createPromise(1), createPromise(4), createPromise(5)];        var fn = async function(promiseArr) {            let awaitArr = []            for (let i = 0, len = arr.length; i < len; i++) {                let currentPromise = promiseArr[i]                let result = await currentPromise                awaitArr.push(result)            }            return awaitArr        }        // async 返回的是一个promise         fn(arr).then(data => {            console.log('data', data);        })

js怎么实现异步串行与异步并行

到此,相信大家对“js怎么实现异步串行与异步并行”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

js怎么实现异步串行与异步并行

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

js怎么实现异步串行与异步并行

本篇内容主要讲解“js怎么实现异步串行与异步并行”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么实现异步串行与异步并行”吧!js异步处理方案,js的异步串行与异步并行一、什么是串行,并行,
2023-07-05

js异步处理方案,js的异步串行与异步并行

本文详细介绍了什么是js串行,并行,如何实现JavaScript异步串行和异步并行,想详细了解的小伙伴,可以借鉴阅读
2023-03-24

JavaScript中Promise处理异步的并行与串行

js中的promise是一个异步编程的解决方案,语法层面上他是一个构造函数,名字为Promise(),下面这篇文章主要给大家介绍了关于JavaScript中Promise处理异步的并行与串行的相关资料,需要的朋友可以参考下
2022-12-19

JavaScript中Promise如何处理异步的并行与串行

这篇“JavaScript中Promise如何处理异步的并行与串行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaSc
2023-07-04

怎么使用JavaScript异步操作中串行和并行

这篇文章主要讲解了“怎么使用JavaScript异步操作中串行和并行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JavaScript异步操作中串行和并行”吧!1、前言本文写一下js
2023-06-25

shell脚本怎么异步并行执行

在shell脚本中,可以使用以下几种方式来实现异步并行执行:1. 后台执行:在命令后面加上`&`,可以将命令放到后台执行。例如:```command1 &command2 &command3 &wait````wait`命令用于等待所有后台
2023-09-22

python 实现异步执行

python 实现异步执行网上看到个例子怎样利用 threading 模块实现异步执行,自己动手试了试,写了个装饰器的例子,很实用。 把 async 分离开,放到一个单独的模块中,就可以把它当成一个模块实用分析一下,下面的例子: 定义了
2023-01-31

JS异步的执行顺序是什么

这篇文章主要介绍“JS异步的执行顺序是什么”,在日常操作中,相信很多人在JS异步的执行顺序是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS异步的执行顺序是什么”的疑惑有所帮助!接下来,请跟着小编一起来
2023-07-02

linux串口读写异步怎么实现

在Linux系统中,可以使用文件IO的方式来实现串口的读写操作。具体的步骤如下:1. 打开串口设备文件: 使用`open()`函数来打开串口设备文件,获取文件描述符。```cint fd = open("/dev/ttyS0", O_RDW
2023-09-16

ASP.NET基于事件的异步模式与异步Action怎么实现

本篇内容主要讲解“ASP.NET基于事件的异步模式与异步Action怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET基于事件的异步模式与异步Action怎么实现”吧!尽管在A
2023-06-17

java代码如何实现异步执行

在Java中,可以使用多线程或者使用Java 8之后引入的CompletableFuture来实现异步执行。使用多线程:Thread thread = new Thread(() -> {// 异步执行的代码逻辑});thread.s
2023-10-25

javascript怎么实现异步

JavaScript是一门常用的编程语言,被广泛应用于web开发、游戏开发等领域。在JavaScript编程中,异步编程是一项重要的技术,它能够提高程序的性能和响应速度。那么,JavaScript怎样实现异步编程呢?本篇文章将从以下方面进行说明。一、异步编程概述要深入了解JavaScript的异步编程,首先需要明确异步编程的概念。异步编程就是在程序执行某一动作时,同时可以执行其
2023-05-20

Laravel如何实现supervisor执行异步进程

今天小编给大家分享一下Laravel如何实现supervisor执行异步进程的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。问
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录