为什么`setTimeout`在通过yield传递回调时不起作用?

AnA*_*ons 5 javascript asynchronous yield typescript

在以下代码中:

function so() {
  console.log('inside the timer')
}

function* sogen() {
  const callback = yield;

  setTimeout(callback, 2000);

  return 1;
}

function() {
  var gen = sogen();
  gen.next(so), gen.next(so);
}()
Run Code Online (Sandbox Code Playgroud)

为什么我从未达到功能so

Aio*_*ros 2

在您的代码片段中,sogen不是常规函数,而是生成器,如*.

您可以调用生成器来获取基本上是一个迭代器,它可以通过该方法进行控制.next(),并且可以在每次遇到yield关键字时暂停其执行。

var it = sogen();
it.next();
Run Code Online (Sandbox Code Playgroud)

您在那里的分配 ( const callback = yield) 将通过后续的 .next() 调用来解决,例如:

it.next(function myCallback() { /* ... */ });
Run Code Online (Sandbox Code Playgroud)

然后生成器将继续运行,直到下一个函数yield或函数结束。