zoukankan      html  css  js  c++  java
  • JS实现串行请求

    使用async和await

    1 var fn = async function(promiseArr) {
    2     for(let i = 0,len = arr.length; i<len; i++) {
    3         currentPromise = (promiseArr[i] instanceOf Promise) ? promiseArr[i]  : Promise.resolve(promiseArr[i]);
    4         var result = await currentPromise;
    5         console.log(result)
    6     }
    7  }   
    8  fn(arr)

    Promise实现

    依照 promises 规范,一旦一个 promise 被创建,它就被执行了。如果then方法里返回的是一个promise对象,那么执行下一个then 的时候必定是在上一个then执行完之后执行。

    关键点在于then的时候再创建

     1 var createPromise = function(time) {
     2     return (resolve, reject)=> {
     3       return new Promise((resolve, reject)=>{
     4           setTimeout(()=>{
     5               console.log('timein'+time)
     6               resolve();
     7           }, time*1000)
     8       })
     9     }
    10 }
    11 
    12 function serpromise(arr) {
    13     arr.reduce((pre, next, index, carr)=>{
    14         return pre.then(next)
    15     }, Promise.resolve())
    16 }
    17 
    18 var arr=[createPromise(2),createPromise(1),createPromise(3),createPromise(4),createPromise(5)];
    19 // 相当于
    20 // Promise.resolve().then(createPromise(2)).then(createPromise(1))......
    21 serpromise(arr)

    参考自

    https://cloud.tencent.com/developer/article/1525757

    https://www.jianshu.com/p/3cb6ab992adb

  • 相关阅读:
    python基本数据类型剖析
    常用正则表达式
    python_re模块
    迭代器模式
    状态模式
    备忘录模式
    asp.net 发送邮件
    建造者模式
    抽象工厂模式
    摸板模式与钩子
  • 原文地址:https://www.cnblogs.com/suihang/p/13660546.html
Copyright © 2011-2022 走看看