Tag: 生成器

将parameter passing给生成器函数

在过去的几个小时里,我一直坚持这样做。 如何将parameter passing给生成器函数? function* getFoo(foo) { return yield Promise.resolve(foo + 10); } exports.testRoute = Promise.coroutine(function* (req, res) { let bar = yield Promise.coroutine(getFoo); // <— how to pass argument?? res.send(bar.toString()); }); 当前代码抛出错误 (我知道它指向我在这里,但它没有说任何关于parameter passing): Unhandled rejection TypeError: A value [object Promise] was yielded that could not be treated as a promise See http:// goo.gl/4Y4pDk From […]

无法在Typescript中使用生成器编译asynchronous代码

上下文 在我进入Typescript的过程中,我被告知阻止调用不应该在asynchronous代码中完成 。 我也使用了生成器,因为它们使目录遍历变得容易并且避免了堆栈空间的耗尽。 但是,当我将asynchronous代码(在本例中为readdir )与生成器结合使用时,编译器会抱怨yield只能在生成器中使用 ,这让我认为编译器不能将闭包,生成器和asynchronous代码组合在一起一去。 function *yyyymmGenerator(dir: string, props: Props) { const fs = require("fs"); const yyyy = props.range.getUTCFullYear().toString(); const mm = props.range.getUTCMonth().toString(); const start = `${yyyy}-${mm}`; const files = fs.readdir(dir, function(err, files) { for (let i = 0; i < files.length; i++) { const file: string = files[i]; if (file.localeCompare(start) >= 0) […]

将callback转换为thunk

我用koa.js使用mongoose(也许是一个不好的select,但必须坚持下去)。 我最初的callback函数是: var _project = yield parse(this); var userdetails = this.req.user; var that = this ; //============================================================= //FInd a user , check the project name exists under the user, if not then create one //============================================================= User.findOne({ '_id': userdetails._id }, function (err, user) { if (err) { this.body = "please login again , your session seems […]

使用JavaScript生成器与摩卡

我有一个发电机function,我试图unit testing。 我正在testing的函数也将一个生成器作为方法参数。 我可以运行mocha –harmony所以它运行testing,但是,我已经在我的testing文件中将发电机function,这将是函数,我会传递给我testing的function,但摩卡抛出一个错误,说它不明白*我的testing文件。 例如, function mytestgenerator() * { return "next gen" } describe('my app', function () { describe('important method', function () { it('should return -1', function () { var result = sut(mytestgenerator); }) }) }) /Users/jonathan/Projects/myapp/test/index_spec.js:9 function mytestgenerator() * { ^ SyntaxError: Unexpected token *

停止KOA中的中间件pipe道执行

我想问一下在KOA中是否有办法停止执行中间件pipe道? 在下面的例子中,我有一个中间件,可以validation某些东西。 当validation失败时,我如何重新编码中间件以停止执行? var koa = require('koa'); var router = require('koa-router')(); var app = koa(); app.use(router.routes()); // middleware app.use(function *(next){ var valid = false; if (!valid){ console.log('entered validation') this.body = "error" return this.body; // how to stop the execution in here } }); // route router.get('/', function *(next){ yield next; this.body = "should not enter […]

试图thunkify一个基于callback的函数来使用发电机(良率),不起作用

我正在尝试使用生成器同步调用koa中的常规callback样式函数。 以下方法工作: var res = yield function (cb) { myDaoObject.load(function (err, res) { cb(err, res); }) }; 所以我不会用适当的库应用来代替它: var ld = thunkify(myDaoObject.load); var res = yield ld(); 而这是行不通的。 这不应该是一回事吗?

Promise.all无效迭代抛出生成器

试图了解Javascript生成器和承诺,我已经检查他们是好的ALAX。 我需要迭代抛出承诺的协程( Promise.coroutine来自Bluebird的libray),使得按照正确的顺序执行一些承诺是很容易的。 有了这个代码(抱歉延迟的反模式,我会学习,以避免它): function myPromise(x,time,i){ var deferred = Q.defer(); setTimeout(() => { deferred.resolve(x + i); },time); return deferred.promise; } router.get('/', function(req, res, next) { for (var i = 0; i < 5; i++) { Promise.coroutine(function*(i) { var a = yield myPromise('a',6000,i); var b = yield myPromise('b',1000,i); console.log(a,b); })(i) .then(() => { console.log('Then'); }). catch((err) […]

即使被拒绝的承诺被处理,也会收到`UnhandledPromiseRejectionWarning`

我已经构build了一个函数,它遍历一个包含同步代码和Promises的Generator : module.exports = { isPromise (value) { return typeof value === 'object' && value !== null && 'then' in value; }, runGen (generatorFunc, startValue) { let that = this, i = 0; function *iterator(resolve, reject) { let runGeneratorFunc = generatorFunc(startValue), yieldedOut = {done: false}, yieldIn; while (!yieldedOut.done) { console.log(i++, 'Ready for next iteration'); if […]

为什么这个生成器返回一个函数而不是一个值

基本上,我试图做我的koa应用程序的HTTP请求,并想知道我会做错什么 var request = require('koa-request'); var beatsGen = beats(); var response1 = beatsGen.next().value; function *beats (){ var options = { url: 'https://api.github.com/repos/dionoid/koa-request', headers: { 'User-Agent': 'request' } }; var response = yield request(options); } 当我控制日志响应1这是我得到的 respone from beats is function (callback) { _request(uri, options, function (error, response, body) { callback(error, response); }) } 我认为response1将是包含callback的body参数而不是函数本身的object的someType。 那么,为什么我得到的函数作为生成器.next()。值? […]

我怎样才能强制在Coffeescript 1.9使用生成器?

CoffeeScript支持生成器现在,但是,我发现只有你使用yield关键字,那么你的函数将被编译为生成器,这里是我的问题,我用koa写我的代码,而一些中间件我不需要asynchronous逻辑,所以我不CoffeeScript认为这是一个正常的function,但是, koa说: app.use() requires a generator function T ^ T,任何人都有一个解决scheme? 谢谢!