Tag: yield

如何在JavaScript中的生成器函数中延迟循环?

我写了一个小的生成器,简单地列举了一些我交给它的消息: 'use strict'; const sequential = function * (messages) { for (let i = 0; i < messages.length; i++) { yield messages[i]; } }; module.exports = sequential; 我这样使用它: for (const message of sequential(messages)) { // Do something to message… } 基本上,一切工作正常。 现在我想让发生器延迟yield调用,例如100毫秒。 问题是,我不能简单地引入一个setTimeout调用,否则yield不再包含在生成器函数中,而是一个正常的callback。 我该如何解决这个问题?

通过yield / generator来理解代码stream

我已经阅读了几个使用JavaScript生成器的代码示例, 比如这个 。 我能想到的最简单的发电机组块就是这样的: function read(path) { return function (done) { fs.readFile(path, "file", done); } } co(function *() { console.log( yield read("file") ); })(); 这确实打印出file的内容,但是我的挂断是在done调用的地方。 看起来,yield是语法糖,用于包装它在callback中返回的内容,并适当地分配结果值(至less在co的情况下,将错误参数引发到callback函数中)。 我对语法的理解是否正确? 使用yield时的yield是什么?

在OR赋值中需要在yieldexpression式周围使用括号的确切语法歧义是什么?

下面的代码… 假定产量是在一个生成器函数内部,而else是被定义的等等。 const value = something || yield else(); …在V8(Chrome或Nodejs)中生成以下内容: const start = initial || yield wait(); ^^^^^ SyntaxError: Unexpected strict mode reserved word …这在Firefox中: SyntaxError: yield is a reserved identifier 我首先注意到了我正在写的一个蓝鸟 协程 。 解决方法是将yield wait()放在括号中。 这个错误发生在parsing时间而不是执行时间。 所以,我的第一个假设是,这是因为这里有一个句法模糊。 我看了一下yield关键字 ,它将其定义为: [rv] = yield [expression]; yield接受一个expression式并返回一个值。 这不会发生|| (OR)运算符为const value = yield else(); ; 所以,我看着运营商的优先 。 || […]