小编Adr*_*ney的帖子

Javascript生成器:了解它们

我很确定我对发电机的理解本质上已被打破.所有在线资源似乎都存在冲突,这会带来令人难以置信的困难和令人困惑的学习体验.

据我所知,该yield关键字使当前正在执行的代码块等待一个值,而不是抛出要在回调中执行的剩余代码.因此,正如大多数教程所指出的那样,您可以使用:

(function *() {
     // Wait until users have be got and put into value of `results`
     var results = yield db.get("users");
     // And continue
     view.display(results);
})();
Run Code Online (Sandbox Code Playgroud)

代替:

db.get("user", function(results) {
    view.display(results);
});
Run Code Online (Sandbox Code Playgroud)

是的,在我尝试编写自己的发电机之前,这一切都很好.我遇到了几个问题:

  • 上面的第一个示例代码将不会运行,因为没有任何东西可以迭代生成器,对吗?有些人需要打电话给.next某个地方,对吗?
  • 整个API必须重写到I/O调用以支持生成器,对吗?
  • 从我收集的内容来看,yield似乎代表值等待最常见的用例,而在实现部分(读取:返回值为/ inside db.get)yield似乎代表将此值发送回当前正在等待的块以恢复执行.

举个例子:

function *fn() {
    yield 1;
    yield "a";
}

var gen = fn();
gen.next(); // 1
gen.next(); // "a";
Run Code Online (Sandbox Code Playgroud)

yield在该上下文中,将值返回而不是等待结果.在上面的第一个示例中,它等待来自db.get和恢复执行的结果,而不是"返回"或发回一个值.如果db.get情况属实,这本身并不是同步的吗?我的意思是,它不完全相同: …

javascript yield generator node.js

20
推荐指数
1
解决办法
4734
查看次数

标签 统计

generator ×1

javascript ×1

node.js ×1

yield ×1