Promise リストは順番に出力され、各非同期操作は並列に実行されます。

この問題の核心はハイライトです

  1. 各非同期操作は同時に実行されます
  2. 結果を配列の順序で出力する

  function createPromise(value, time) {
    
    
    return new Promise((resolve, reject) => {
    
    
      setTimeout(() => {
    
    
        resolve(value)
      }, time)
    })
  }

  let list = [
    createPromise(1, 1000),
    createPromise(2, 6000),
    createPromise(3, 4000),
    createPromise(4, 3000),
  ];

  let last = -1;

  function print(data, index) {
    
    
    // 前边的输出 没输出完,直接return
    if (index - last === 1) {
    
    
      // 检查后边的,后边没有,退出,有,输出
      while (data[index] !== undefined) {
    
    
        console.log(data[index])
        last = +index;
        index++;
      }
    }
  }

  let proxy = new Proxy({
    
    }, {
    
    
    set(target, p, value, receiver) {
    
    
      target[p] = value;
      print(target, p);
    }
  });

  function run(promiseList) {
    
    
    for (let a = 0; a < promiseList.length; a++) {
    
    
      let p = promiseList[a];
      p.then(r => {
    
    
        proxy[a] = r;
      })
    }
  }

  run(list)

おすすめ

転載: blog.csdn.net/qq_29334605/article/details/114534524
おすすめ