广告
返回顶部
首页 > 资讯 > 精选 >js怎么实现异步串行与异步并行
  • 462
分享到

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

2023-07-05 15:07:00 462人浏览 安东尼
摘要

本篇内容主要讲解“js怎么实现异步串行与异步并行”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么实现异步串行与异步并行”吧!js异步处理方案,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怎么实现异步串行与异步并行”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: js怎么实现异步串行与异步并行

本文链接: https://www.lsjlt.com/news/353101.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • js怎么实现异步串行与异步并行
    本篇内容主要讲解“js怎么实现异步串行与异步并行”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js怎么实现异步串行与异步并行”吧!js异步处理方案,js的异步串行与异步并行一、什么是串行,并行,...
    99+
    2023-07-05
  • js异步处理方案,js的异步串行与异步并行
    目录js异步处理方案,js的异步串行与异步并行一、什么是串行,并行,并发二、实现异步串行三、实现异步并行js异步处理方案,js的异步串行与异步并行 一、什么是串行,并行,并发 串行:...
    99+
    2023-03-24
    javascript异步处理 js异步串行与并行
  • JavaScript中Promise处理异步的并行与串行
    目录一、异步的“并行” 并行中的综合处理二、异步的“串行”:2.1 then链机制处理2.2 真实项目中,想实现异步的串行,...
    99+
    2022-12-19
    promise串行和并行 js promise的用法总结 promise串行执行
  • JavaScript异步操作中串行和并行
    目录1、前言2、es5方式3、异步函数串行执行4、异步函数并行执行5、异步函数串行执行和并行执行结合6、es6方式7、async 和await 结合promise all1、前言 本...
    99+
    2022-11-12
  • JavaScript中Promise如何处理异步的并行与串行
    这篇“JavaScript中Promise如何处理异步的并行与串行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaSc...
    99+
    2023-07-04
  • 怎么使用JavaScript异步操作中串行和并行
    这篇文章主要讲解了“怎么使用JavaScript异步操作中串行和并行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JavaScript异步操作中串行和并行”吧!1、前言本文写一下js...
    99+
    2023-06-25
  • shell脚本怎么异步并行执行
    在shell脚本中,可以使用以下几种方式来实现异步并行执行:1. 后台执行:在命令后面加上`&`,可以将命令放到后台执行。例如:``...
    99+
    2023-09-22
    shell
  • python 实现异步执行
    python 实现异步执行 网上看到个例子怎样利用 threading 模块实现异步执行,自己动手试了试,写了个装饰器的例子,很实用。 把 async 分离开,放到一个单独的模块中,就可以把它当成一个模块实用 分析一下,...
    99+
    2023-01-31
    python
  • SpringBoot异步任务及并行事务实现
            上一篇介绍了原生Java如何实现串行/并行任务,主要使用了线程池 + Future + CountDownLatch,让主线程等待子线程返回后再向下进行。而在SpringBoot中,利用@Async和AOP对异步任务提供了更...
    99+
    2023-09-05
    java spring boot mysql
  • JS怎么实现异步任务队列
    本篇内容主要讲解“JS怎么实现异步任务队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS怎么实现异步任务队列”吧!问题有个需求,需要实现一个异步任务队列,并...
    99+
    2022-10-19
  • JS异步的执行顺序是什么
    这篇文章主要介绍“JS异步的执行顺序是什么”,在日常操作中,相信很多人在JS异步的执行顺序是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS异步的执行顺序是什么”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-02
  • linux串口读写异步怎么实现
    在Linux系统中,可以使用文件IO的方式来实现串口的读写操作。具体的步骤如下:1. 打开串口设备文件: 使用`open()`函数来...
    99+
    2023-09-16
    linux
  • JS中实现一个串型异步函数队列
    目录背景通常解法async/await 串型请求for...of 解法需求一reduce 实现需求二递归实现背景 在日常业务开发中,总会遇到这种场景,有一串请求,下一个请求依赖上一个...
    99+
    2022-11-13
  • 怎么实现数据库分区表+dblink异步调用并行
    本篇内容介绍了“怎么实现数据库分区表+dblink异步调用并行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2022-10-18
  • Flask实现异步执行任务
    Flask 是 Python 中有名的轻量级同步 web 框架,在一些开发中,可能会遇到需要长时间处理的任务,此时就需要使用异步的方式来实现,让长时间任务在后台运行,先将本次请求的响...
    99+
    2022-11-12
  • ASP.NET基于事件的异步模式与异步Action怎么实现
    本篇内容主要讲解“ASP.NET基于事件的异步模式与异步Action怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET基于事件的异步模式与异步Action怎么实现”吧!尽管在A...
    99+
    2023-06-17
  • javascript怎么实现异步
    JavaScript是一门常用的编程语言,被广泛应用于web开发、游戏开发等领域。在JavaScript编程中,异步编程是一项重要的技术,它能够提高程序的性能和响应速度。那么,JavaScript怎样实现异步编程呢?本篇文章将从以下方面进行...
    99+
    2023-05-20
  • ajax中怎么实现同步异步
    ajax中怎么实现同步异步,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。$("#btn_saveFWSB"...
    99+
    2022-10-19
  • Python中怎么实现同步和异步
    Python中怎么实现同步和异步,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、同步与异步#同步编程(同一时间只能做一件事,做完了才能做下一件事情) ...
    99+
    2023-06-17
  • java代码如何实现异步执行
    在Java中,可以使用多线程或者使用Java 8之后引入的CompletableFuture来实现异步执行。 使用多线程: Th...
    99+
    2023-10-25
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作