且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何将Node.js异步流回调转换为异步生成器?

更新时间:2022-05-25 23:01:08

您需要一个事件存储桶,下面是一个示例:

You need a event bucket, here is an example:

function bucket() {
  const stack = [],
    iterate = bucket();

  var next;

  async function* bucket() {
    while (true) {
      yield new Promise((res) => {
        if (stack.length > 0) {
          return res(stack.shift());
        }

        next = res;
      });
    }
  }

  iterate.push = (itm) => {
    if (next) {
      next(itm);
      next = false;
      return;
    }

    stack.push(itm);
  }

  return iterate;
}

;
(async function() {
  let evts = new bucket();

  setInterval(() => {
    evts.push(Date.now());
    evts.push(Date.now() + '++');
  }, 1000);

  for await (let evt of evts) {
    console.log(evt);
  }
})();