Tag: 生成器的

从节点JS中的生成器获取返回值

我似乎无法弄清楚如何获得发电机的返回值 – 任何人都知道我在做什么错了? function getGeneratorReturn() { var generator = runGenerator(); var generatorReturn = null; var done = false; while(!done) { var currentNext = generator.next(); console.log('Current next:', currentNext); generatorReturn = currentNext.value; done = currentNext.done; } return generatorReturn; } function* runGenerator() { var a = yield 1; var b = yield 2; var c = a + […]

我怎样才能将callback传递给我传递给“vo”库的生成器?

我想了解callback是如何工作的,所以我创build了一个函数,并且传递了第二个名为“callback”的参数,我使用“callback(arr)”在函数结尾处调用该函数。 不过,我收到一个错误,说:“callback是不是一个function”? 你能告诉我我做错了什么吗? UPDATE vo是一个nodejs库,它使用一个生成器函数*()并运行所有的yield。 这基本上是一个处理asynchronous代码,lesscallback的方法(是的,我知道我也使用了callback,但这是一个很好的select)。 一个更受欢迎的图书馆,做同样的事情是合作。 链接到vo: https : //github.com/matthewmueller/vo var Nightmare = require('nightmare'); var vo = require('vo'); function* MyFunction(query, callback) { arr = []; for (i = 0; i < 1; i++) { arr.push(yield Nightmare({ show: true }).goto(`http://google.com`) .inject('js', 'jquery-3.1.0.js') .evaluate(() => { var title; title = 1 extend = 2 var img; […]

在发生器/产量中包装fs.readFile

我试图让我的头在发电机和JavaScript和Node.js屈服,但有一个问题。 理想情况下,我想要做的就是将fs.readFile与generate / yield包装起来,这样我就可以同步使用它而不会阻塞任何东西。 我已经拿出了下面的代码: function readFileSync (path) { return (function *(){ return yield require('fs').readFile(path, function *(err, data){ yield data; }); })(); } console.log(readFileSync('test-file.txt')); 但是,不幸的是, readFileSync总是返回{}而不是文件内容。 希望我想达到的目标仍然是可能的,或者我完全错过了发生器/产量的观点,而且我完全错误地使用它,在这种情况下,指出我出错的地方,任何资源都会很好。

试图理解node.js中的生成器/ yield – 执行asynchronous函数的是什么?

Node.js现在有了生成器。 我的理解是,可以使用生成器来编写看起来更线性的代码,避免厄运风格编码的callback地狱和金字塔。 所以到现在为止,我的理解是,在一个生成器中,代码执行直到达到“yield”语句。 发生器function的执行在此处暂停。 yield语句指定一个可能是函数的返回值。 通常这将是一个阻塞I / O函数 – 通常需要asynchronous执行的函数。 yield的返回函数返回到所谓的generator。 我的问题是,在这一点上会发生什么? 究竟是什么执行阻塞I / O函数的收益率返回? 编写看起来是线性的生成器/产出代码是否正确,需要一个特定types的函数调用生成器,一个函数循环遍历生成器并执行yield返回的每个asynchronous函数,并返回asynchronous函数的结果返回到发生器? 目前还不清楚如何执行收益返回的asynchronous函数。 如果它是由调用生成器的函数执行的,是不是asynchronous执行? 我猜是这样,否则会导致阻塞行为。 总结我的问题: 要用发生器编写“线性”asynchronous代码,是否需要有一个调用函数来迭代发生器,执行函数的callback函数,并将callback的结果返回给生成器? 如果对问题1的回答是肯定的,那么所产生的函数是如何asynchronous执行的呢? 任何人都可以提供一个更好的概述/整个过程如何工作的总结?

Javascript生成器:了解它们

我很确定我对发电机的理解是固有的。 所有的在线资源似乎都是冲突的,这使得一个难以置信的困难和混乱的学习经验。 根据我的理解, yield关键字可以使当前正在执行的代码块等待一个值,而不是在callback中执行剩余的代码。 所以,正如大多数教程指出的,你可以使用这个: (function *() { // Wait until users have be got and put into value of `results` var results = yield db.get("users"); // And continue view.display(results); })(); 代替: db.get("user", function(results) { view.display(results); }); 没错,直到我尝试写我自己的发电机,这一切都很好。 我遇到了几个问题: 上面的第一个示例代码不会运行,因为没有任何东西可以迭代生成器,对吗? 有些更高级别的人需要在某处调用.next ,对吗? 整个API将不得不重写到支持生成器的I / O调用,对吗? 从我所收集的数据来看, yield似乎代表了等待大多数一般用例的值,而在实现部分(读取:返回值到/ db.get内部) yield似乎代表将此值返回到当前正在等待的块以恢复执行 。 举个例子: function *fn() { yield […]