Tag: 生成器

无法弄清楚如何使用asynchronous请求的收益率

我对节点有点新鲜,对于koa我是全新的。 我正在尝试使用生成器来向API执行asynchronousWeb请求,但是我无法弄清楚如何将所有的部分放在一起。 作为一个说明,我使用蓝鸟,因为我看到一些例子这样做,这似乎是一个好主意。 如果没有蓝鸟有更简单的方法去做我想做的事情,那也是很好的做法。 在我的模块中: plugin.searchForItem = function * (name) { Promise = require('bluebird'); request = Promise.promisifyAll(require('request')); console.log("making request"); yield request.getAsync('http://apisitegoeshere.com/apicall').then(function * (result) { var response = result[0]; var body = result[1]; console.log(response.statusCode); yield response; }); }; 我这样称呼它: search.searchForShow = function (name) { data = this.plugins[0].searchForItem(name); console.log("search returned: " + data); console.log("search returned2: " + […]

如果一个函数是一个生成器函数,如果.bind()已经被调用,是不可能的?

看起来像调用.bind(this)任何生成器函数打破了我的能力,看看函数是否是一个生成器。 有想法该怎么解决这个吗? var isGenerator = function(fn) { if(!fn) { return false; } var isGenerator = false; // Faster method first // Calling .bind(this) causes fn.constructor.name to be 'Function' if(fn.constructor.name === 'GeneratorFunction') { isGenerator = true; } // Slower method second // Calling .bind(this) causes this test to fail else if(/^function\s*\*/.test(fn.toString())) { isGenerator = true; } […]

产生ENOENT node.js错误

我已经用express生成器启动了一个node.js应用程序,我有一个奇怪的问题,我无法通过浏览器查看两次页面,第一次加载正常,第二次不是节点进程结束出现以下错误: GET / 304 412ms events.js:72 throw er; // Unhandled 'error' event ^ Error: spawn ENOENT at errnoException (child_process.js:988:11) at Process.ChildProcess._handle.onexit (child_process.js:779:34) 的package.json { "name": "example01-express", "version": "0.0.1", "private": true, "scripts": { "start": "node-dev ./bin/www" }, "dependencies": { "body-parser": "~1.0.0", "cookie-parser": "~1.0.1", "debug": "~0.7.4", "express": "~4.2.0", "jade": "~1.3.0", "morgan": "~1.0.0", "node-compass": "0.2.3", "static-favicon": "~1.0.0" }, […]

通过yield&co。获得承诺的价值

我试图找出如何通过yield来获得承诺的价值,可能与“合作”: function *(){ var someVar = yield functionThatReturnsAPromise(); } 被调用的函数不是一个生成器,只是一个正常的函数。 有了上面的一些someVar == Promise ,但我想要解决的价值。 公司或其他图书馆是否有办法做到这一点?

了解具有fs模块的Node JS生成器

我一直对Node JS非常兴奋。 我终于决定closures并编写一个testing项目,以了解Node最新的Harmony构build中的生成器。 这是我非常简单的testing项目: https://github.com/kirkouimet/project-node 要运行我的testing项目,您可以轻松地从Github中提取文件,然后运行它: node –harmony App.js 这是我的问题 – 我似乎无法让节点的asynchronousfs.readdir方法与内置的生成器运行。 其他项目,如银河和暂停似乎能够做到这一点。 这是我需要修复的代码块。 我想能够实例化FileSystemtypes的对象并调用其上的.list()方法: https://github.com/kirkouimet/project-node/blob/4c77294f42da9e078775bb84c763d4c60f21e1cc/FileSystem.js#L7-L11 FileSystem = Class.extend({ construct: function() { this.currentDirectory = null; }, list: function*(path) { var list = yield NodeFileSystem.readdir(path); return list; } }); 我需要提前做些什么来将节点的fs.readdir转换成一个生成器? 一个重要的注意事项是,我正在parsing创build的所有类函数。 这使我可以处理发电机的function,而不像普通的function https://github.com/kirkouimet/project-node/blob/4c77294f42da9e078775bb84c763d4c60f21e1cc/Class.js#L31-L51 这个项目我一直很难过。 会爱任何援助! 这是我想要完成的: 大量使用带有inheritance的John Resig的JavaScript Class支持修改版本的类 使用生成器获得对Node的asynchronous调用的内联支持 编辑 我试图实现你的例子function,我遇到了一些麻烦。 list: function*(path) { var […]

将invRegex.py移植到Javascript(Node.js)

我一直试图将invRegex.py移植到node.js实现一段时间,但我仍然在努力。 我已经有了正则expression式分析树,这要归功于ret.js标记器,它工作得很好,但是所有不同元素的实际生成和连接都是以内存效率的方式展现给我的。 为了简单起见,可以说我有以下的正则expression式: [01]{1,2}@[af] invRegex.py会产生下面的输出( tabbified占用更less的空间): 0@a 0@b 0@c 0@d 0@e 0@f 00@a 00@b 00@c 00@d 00@e 00@f 01@a 01@b 01@c 01@d 01@e 01@f 1@a 1@b 1@c 1@d 1@e 1@f 10@a 10@b 10@c 10@d 10@e 10@f 11@a 11@b 11@c 11@d 11@e 11@f 考虑到我能够获得每个单独的令牌并生成一个包含所有有效的单个输出的数组: [01]{1,2} = function () { return ['0', '00', '01', '1', '10', '11']; […]

发电机function与蓝鸟和coexpression

我正在尝试使用节点0.12中的一些和声function,特别是尝试使用新的生成器function。 我正在用co(v4),bluebird和express(v4)这样做,就像这样: // … var fs = bluebird.promisifyAll(require('fs')); // … app.post('/test', co.wrap(function* (req, res, next) { var contents = yield fs.readFileAsync('/etc/hosts', 'utf8'); return res.send(contents); })); // … 根据它的文档,co.wrap返回一个正常的函数,它返回给定生成器函数的promise。 到目前为止,这是工作正常,但我不知道的是,如果a)我通过不等待返回的承诺的结果泄漏内存和b)如果我可能会失去一个exception抛出我的生成器函数,或一它使用的模块。 这是一个好方法吗? 你看到有什么不对吗?

forEach在Node.js中使用生成器

我正在使用Koa.js框架和Mongoose.js模块。 通常从MongoDB得到一个结果我的代码是这样的: var res = yield db.collection.findOne({id: 'my-id-here'}).exec(); 但是我需要为名为'items'的数组的每个元素执行这一行。 items.forEach(function(item) { var res = yield db.collection.findOne({id: item.id}).exec(); console.log(res) // undefined }); 但是这个代码不能像yield中的函数那样运行。 如果我写这个: items.forEach(function *(item) { var res = yield db.collection.findOne({id: item.id}).exec(); console.log(res) // undefined }); 我也没有得到resvariables的结果。 我试图使用“ generator-foreach ”模块,但没有像这样工作。 我知道这是我对Node.js的语言素养缺乏了解。 但是,你们能帮我find办法吗?

为什么不从`.map`callback中产生回报?

学习生成器 – 4»捕获错误! 该解决scheme使用for loop但我只是找不到任何MDN – 迭代协议 ,指的是callback内的产量。 我会猜测答案就是don't do that但是如果有人有时间或倾向提供一个解释,请提前致谢! 码: function *upper (items) { items.map(function (item) { try { yield item.toUpperCase() } catch (e) { yield 'null' } } } var badItems = ['a', 'B', 1, 'c'] for (var item of upper(badItems)) { console.log(item) } // want to log: A, B, null, C […]

在JavaScript中实现monad

现在, node.js支持ECMAScript Harmony生成器,我们可以在Haskell中简洁地写出monadic代码: function monad(unit, bind) { return function (f) { return function () { var g = f.apply(this, arguments); return typeOf(g) === "Generator" ? send() : unit(g); function send(value) { var result = g.next(value); if (result.done) return unit(result.value); else return bind(result.value, send); } }; }; } function typeOf(value) { return Object.prototype.toString.call(value).slice(8, -1); } 在上面的代码中, […]