Tag: 生成器

如何安排一个function,每天使用NodeJS和Generators运行?

我需要一个函数,每天在一个给定的时间与生成器 (yield)进行调用,做我的search我已经find了两个节点模块,使我能够做到这一点,一个是node-schedule ,另一个是node-cron Node-cron 似乎不支持生成器 节点时间表应该有支持,但它似乎不工作在这里指出: 问题#325 为了更清楚我想要完成什么,我附上了#325相同的代码: const date = momemt().add(1, 's'); // 1 second after now. schedule.scheduleJob('taksid', date, function*(){ console.log('Hi'); const result = yield Message.findAll(); console.log('Result: ' + result); }); 如问题所述,'嗨'被打印出来,'结果'不打印。 我无法find一个方法来安排一个函数与发电机,如果你们中有些人知道如何做到这一点将是伟大的! 先谢谢你们

控制每个循环nodejs中的执行stream程

我试图停止setTimeOut使用生成器的执行stream程。 我究竟做错了什么? 我不能每1500毫秒获取console.log。 我是新的节点,请不要心灵感应杀死我,如果我做一个非常愚蠢的事情 ['1', '2', '3'].forEach(function* iteration(index) { // Some logic here yield setTimeout(() => console.log('sick of this!'), 1500) iteration.next(index) })

生成器 – thunkifying JSON.parse返回奇怪的结果

我正在尝试使用co和生成器来读取JSON文件。 test.json包含: { "hello": "world" } 这通过jsonlint所以它应该是有效的。 目前这里是我的代码: #!/usr/bin/env node –harmony var co = require('co'), fs = require('fs'), thunkify = require('thunkify'); var read = thunkify(fs.readFile); var JSONParse = thunkify(JSON.parse); var log = console.log.bind(console); co(function *(){ var fileContents = yield read('test.json', 'utf-8'); var works = yield JSONParse(fileContents) log(works) })() 只有一个空的对象被logging。 然而, fileContents已满,所以它似乎是破碎的JSON.parse部分。 我究竟做错了什么?

Node.js:为“yield”关键字promisifyingcallback库

我试图用Koa.js构build一个简单的REST API。 它使用ES6生成器函数,我发现比callback更愉快(它们就像C#的asynchronous等待)。 yield关键字需要一个可接受的(promise,thunk,generator)。 我使用Bluebird的promisifyAll方法promisifycallback库(在我的情况下请求),但我仍然不断收到错误。 这是我的代码和错误: var koa = require('koa') , route = require('koa-route') , app = module.exports = koa() , Promise = require('bluebird') , request = Promise.promisifyAll(require('request')); app.use(route.get('/users', list)); function *list() { var res = yield request.get('http://backbonejs-beginner.herokuapp.com/users'); this.body = res.body; } app.listen(3000); 堆栈跟踪的错误: Error: yield a function, promise, generator, array, or object at next […]

如何在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。 我该如何解决这个问题?

如何在JavaScript中testing基于生成器的stream量控制(ES6)?

如何让Mocha等到asynchronousfunction完成? 模 var fs = require('mz/fs'); var co = require('co'); module.exports = new filecache(); function filecache () { var self = this; var storage = storage || {}; self.cache = co(function* (filePath, fileName) { if (yield fs.exists(filePath)) { storage[fileName] = yield fs.readFile(filePath); } }); self.has = function has (fileName) { return storage.hasOwnProperty(fileName); }; } testing(摩卡) […]

NodeJS控制台SyntaxError:生成器的意外标记*

我正在运行NodeJS控制台: $ node –version v0.12.0 我试图实现一个发电机function,如这一个 function* colorGen() { var colors = ["red", "green", "blue", "white"] var i = 0; yield colors[i]; i += 1; if (i > 3) {i = 0;} } 但是当我运行第一行时,出现语法错误: $ node > function* colorGen() { SyntaxError: Unexpected token * at Object.exports.createScript (vm.js:44:10) at REPLServer.defaultEval (repl.js:117:23) at bound (domain.js:254:14) at REPLServer.runBound […]

yield如何理解Node.js / Koa.js应用程序中的Promise?

我正在查看一个Koa.js / Node.js应用程序,我想我对生成器和许诺有很好的理解。 但是我无法围绕下面的代码: function *parseAuthorization() { let parameters = this.query; let accessToken = yield storakleShopifyApi.exchangeTemporaryToken(parameters); if(accessToken) { return … } return this.response.redirect("/home/"); }; exchangeTemporaryToken方法如下: function* exchangeTemporaryToken(query) { let authApi = getAuthApi(query.shop); return new Promise(function (resolve, reject) { authApi.exchange_temporary_token(query, function (err, data) { if (err) { return reject(err); } return resolve(data['access_token']); }); }); }; * […]

使用IntelliJ或WebStorm中的生成器来debuggingJS的更好方法

我正在使用Koa框架在Node JS中的webapp上工作。 所有的stream量控制都是用发生器完成的,而不是callback。 代码看起来是连续的,但实际stream程不是。 无论如何,它看起来更清洁,callback地狱。 下面是一个用koa编写的控制器函数的简单例子: function *findUserById(userId) { var user = yield getUserOrError404(userId); yield loadAdditionalData(user); yield data.users.save(user); return user; } 但是有一个难点:在我的IDE(IntelliJ IDEA)中单步执行代码,并不能很好地工作。 一旦执行结果与yield语句一致,如果我只是“跳过”,执行stream就会上升到koa代码堆栈(这实际上不是IDE的错误,因为它只是遵循生成器的实际执行stream程,yield语句和Node事件循环)。 目前我必须为下一个语句设置一个断点,我希望debugging器暂停下一行,然后点击“Resume program”button。 当产量超过2-3的时候可能变得乏味。 有没有更好的方法(技巧,插件,…)来通过发电机沉重的JS代码,允许越过一个yield语句,就像它是一个“正常”顺序语句?

修改生成器函数原型

TL; DR 我想修改一个生成器函数实例的原型 – 也就是从调用function*返回的对象。 假设我有一个生成器函数: function* thing(n){ while(–n>=0) yield n; } 然后,我做一个实例: let four = thing(4); 我想定义一个叫做exhaust的发电机原型,就像这样: four.exhaust(item => console.log(item)); 这将产生: 3 2 1 0 我可以通过这样做来破解它: (function*(){})().constructor.prototype.exhaust = function(callback){ let ret = this.next(); while(!ret.done){ callback(ret.value); ret = this.next(); } } 然而, (function*(){})().constructor.prototype.exhaust似乎非常…哈克。 没有GeneratorFunction的原型,我可以随时编辑…或者有吗? 有一个更好的方法吗?