js控制异步输出顺序

发布于 2022-09-11 20:55:00 字数 556 浏览 26 评论 0

class Test {
  constructor() {
    const nums = [1, 2, 3];
    (async() => {
      for(let i of nums) {
        let x = await this.print(i);
        console.log(x);
      }
    })();
  }

  print(x) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(x);
      }, 1000);
    })
  }
}

const test = new Test();

(async() => {
  let x4 = await test.print(4);
  console.log(x4);
  let x5 = await test.print(5);
  console.log(x5);
})();

怎样才能做到顺序输出 1 2 3 4 5 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

赢得她心 2022-09-18 20:55:00

Test类增加一个cprm属性,用来接收构造函数里面的异步调用,值是Promise类型。然后在调用输出4之前await这个cprm属性,就可以等到构造函数的123都输出完成后再输出4。

class Test {
  constructor() {
    const nums = [1, 2, 3];
    this.cprm=(async() => {
      for(let i of nums) {
        let x = await this.print(i);
        console.log(x);
      }
    })();
  }

  print(x) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(x);
      }, 1000);
    })
  }
}

const test = new Test();


(async() => {
  await test.cprm;
  let x4 = await test.print(4);
  console.log(x4);
  let x5 = await test.print(5);
  console.log(x5);
})();

你是暖光i 2022-09-18 20:55:00
    class Test {
        constructor() {
            const nums = [1, 2, 3];
            this.init = Promise.all(nums.map(async n=>console.log(await this.print(n, true))));
        }

        print(x, isInit =false) {
            return (isInit ? Promise.resolve() : this.init).then(()=> new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    resolve(x);
                }
                , 1000);
            }
            ));
        }
    }

    const test = new Test();

    (async()=>{
        let x4 = await test.print(4);
        console.log(x4);
        let x5 = await test.print(5);
        console.log(x5);
    }
    )();
}
策马西风 2022-09-18 20:55:00

我来投机取巧,~( ̄▽ ̄)~*

class Test {
  constructor() {
    const nums = [1, 2, 3];
    (async() => {
      for(let i of nums) {
        let x = await this.print(i);
        console.log(x);
      }
    })();
  }

  print(x) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(x);
      }, 1000);
    })
  }
}

const test = new Test();
setTimeout(async() => {
  let x4 = await test.print(4);
  console.log(x4);
  let x5 = await test.print(5);
  console.log(x5);
}, 3000)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文