一尘不染

Javascript生成器功能?

javascript

对 Javascript 中的这个生成器函数做了什么很愚蠢:

function* generator() {
  let hook, waiting = yield new Promise(resolve => {
    function* wait() { resolve(yield) }
    hook = wait();
    hook.next();
  });
  hook.next(waiting);
}

阅读 102

收藏
2022-07-25

共1个答案

一尘不染

这个需要几分钟来处理。

resolve(yield)部分实际上为承诺提供了第二个 next() 调用的参数(等待)的值。我认为这可以用更清洁的方式制作,只需 1 个发电机。

MDN 上的 generator.next()

结果是:

let g = generator()
g.next().value.then(console.log) // returns a pending promise
g.next("test")                   // returns nothing important but
// the then callback logs "test"

因此,您可以在第一次调用 generator.next().value 时放置尽可能多的回调,然后让它们全部在第二次调用,同时还可以将参数传递给第一个参数,您可以以常规的 Promise 方式链接该参数。

2022-07-25