构建队承诺列实现异步函数顺序执行的案例分析

  介绍

这篇文章将为大家详细讲解有关构建队承诺列实现异步函数顺序执行的案例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<>强场景

有a, b, c三个异步任务,要求必须先执行,再执行b,最后执行c

且下一次任务必须要拿到上一次任务执行的结果,才能做操作

<强>思路

我们需要实现一个队列,将这些异步函数添加进队列并且管理它们的执行,队列具有先进先出的特性,也就是先添加进去的会被先执行,接着才会执行下一个(注意跟栈作区别)

大家也可以类比一下jQuery的动画方法,添加多个动画也会按顺序执行

<强>解决

模拟3个异步函数

//,异步函数   var  a =, function  (), {   ,return  new 承诺(function (解决,,拒绝),{   setTimeout(才能function  (), {   ,才能解决(& # 39;一个# 39;)   ,,},1000)   ,})   }//,异步函数b   var  b =, function (数据),{   ,return  new 承诺(function (解决,,拒绝),{   解决才能(data  +, & # 39; b # 39;)   ,})   }//,异步函数c   var  c =, function (数据),{   ,return  new 承诺(function (解决,,拒绝),{   setTimeout(才能function  (), {   ,才能解决(data  +, & # 39; c # 39;)   ,,},500)   ,})   }

<>强解决方法一(使用然后链式操作)

特点:可以满足需求,但是书写比较繁琐

代码

//链式调用   一()   ,不要犹豫(function (数据),{   return 才能;b(数据)   ,})   ,不要犹豫(function (数据),{   return 才能;c(数据)   ,})   ,不要犹豫(function (数据),{   console.log才能(数据)//,abc   之前,})

<强>方法二(构建队列)

特点:封装方法,可移植到别处使用

代码

//,构建队列   function 队列(arr), {   ,var  sequence =, Promise.resolve ()   ,arr.forEach (function (项),{   时间=sequence 才能;sequence.then(项)   ,})   return 序列   }//,执行队列   队列([a, b, c))   ,不要犹豫(data =祝辞,{   console.log才能(数据)//,abc   之前,})

<强>方法三(使用异步,等待构建队列)

同方法二,只是显得更高大上点

代码

async  function 队列(arr), {   ,let  res =零   ,for  (let  promise  of  arr), {   时间=res 才能;await 承诺(res)   ,}   return  await  res   }   队列([a, b, c))   ,不要犹豫(data =祝辞,{   console.log才能(数据)//,abc   之前,})

顺便说一句,知更鸟的承诺。降低也可以用来顺序执行函数,但是可使用的场景非常有限,一般用来读取文件信息,而以上给出的方法,不管你在异步函数中做了什么,只要函数最后返回了一个承诺对象,都可以使用

关于“构建队承诺列实现异步函数顺序执行的案例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。

构建队承诺列实现异步函数顺序执行的案例分析