Articles of 产量

如何在recursion生成器函数中产生请求?

我创build了一个生成器函数recursion检查一个string,并返回一个parsing的输出。 我正在尝试使用koa-request在生成器中发出请求,但是它正在返回undefined。 var parseUserExpression = function *() { var body = yield bodyParser.json(this); var fnString = body.ts; var res = yield parseRulesAndFunctions(fnString, null); this.body = res; }; // Recursive function var parseRulesAndFunctions = function *(aStr, start) { var res; start = start || 0; var fnDetails = getFnDetails(aStr, start); if (fnDetails.fnType === 'run') { var […]

从KOA中间件内的承诺中调用yield

我正在编写一个KOA中间件,以便从mongo中提取用户信息,如果它没有被caching的话。 我收到以下错误: “this.getUser”函​​数返回一个ES6承诺,如果没有使用请求caching,则从mongo获取用户,或创build一个新的匿名用户。 module.exports = function* securityMiddleware(next) { this.getUser(this.request) .then((user)=>{ if(user.isAonymous){ //throw 401 access error }else{ yield next; } }); }; 这是无效的,因为:jshint说生成器必须有一个yield并抛出一个SyntaxError:意外的严格模式保留字。 你如何在KOA中间件生成器中使用promise? 我正在使用KOA v1.2.0。

从节点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 + […]

在发生器/产量中包装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 […]