一个异步操作迭代完成再去执行下一个异步操作

    将异步等待时间,当做参数 time传入方法中,通过 resolve()输出
    Symbol.asyncIterator 异步的可迭代协议,配合 for-await-of 进行异步函数的迭代

    1. function getPromise(time) {
    2. return new Promise((resolve, reject) => {
    3. setTimeout(() => {
    4. resolve({
    5. value: time,
    6. done: false
    7. })
    8. }, time);
    9. })
    10. }
    11. const arr = [getPromise(1000), getPromise(5000), getPromise(3000)]
    12. arr[Symbol.asyncIterator] = function () {
    13. let nextIndex = 0
    14. return {
    15. next() {
    16. return nextIndex < arr.length ? arr[nextIndex++] :
    17. Promise.resolve({
    18. value: undefined,
    19. done: true
    20. })
    21. }
    22. }
    23. };
    24. async function test() {
    25. for await (let item of arr){
    26. console.log(item)
    27. }
    28. }
    29. test()

    image.png