javascrip实现同步

260 阅读1分钟
原文链接: cjl-df.github.io

cjl-df.github.io

javasciprt 如何实现同步那

最近一直在想这个问题,javascript 如何实现同步,最近实现了一下,不过都是借助ES6语法,不知道还有没有其他的实现方式?自己想了一下实在想不出其他的方式了,大家有的话可以交流一下;曾考虑过(消息队列或者generator)从原理上思考好像实现不了,写了一下,也没能实现

  • 第一种借助async,await

      async function asyncTest() {
          for (let i = 0; i < 10; i++) {
              await setTimeout(() => {
              console.log(i);
              });
          }
      }
    
  • 第二种借助promise.resolve

      Promise.resolve(
          new Promise((resolve, reject) => {
              setTimeout(() => {
              console.log("1");
              resolve();
              }, 1000);
          })
          )
          .then(() => {
              return new Promise((resolve, reject) => {
              setTimeout(() => {
                  console.log("2");
                  resolve();
              }, 500);
              });
          })
          .then(() => {
              return new Promise((resolve, reject) => {
              setTimeout(() => {
                  console.log("3");
                  resolve();
              }, 50);
              });
          });
    
  • 第三种属于第二中的变形了

      function asyncPromise() {
          function generatorPromise(i) {
              return new Promise((resolve, reject) => {
              setTimeout(() => {
                  console.log(i);
                  resolve(i);
              }, Math.random() * 10);
              });
          }
    
          let _this = Promise.resolve(true);
          for (let i = 0; i < 10; i++) {
              _this = _this.then(() => generatorPromise(i));
          }
      }
    
      asyncPromise();
    

    大家有什么想法,请赐教,说一下