Articles of 生成器

“在Foreach node.js中,迭代器不提供'throw'方法

我遇到了nodejs生成器的麻烦,当我启动我的代码时,我得到了以下错误: node:3632) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: The iterator does not provide a 'throw' method. (node:3632) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 代码如下,我使用AdoniJs。 User.all和user.typeModule都是数据库关系。 // This is the function that is called […]

Typescriptasynchronous生成器,用于套接字

我想了解TSasynchronous生成器。 在Node.js中,我打开一个套接字,从中读取所有数据,然后closures它。 我试图把这个成为一个asynchronous生成器的数据块。 async function* connectAndRead() { const socket = net.connect(80, 'localhost'); socket.on('data', data => ???); socket.on('end', socket.close()); } 有可能做一个asynchronous发生器的数据从套接字读取?

用“暂停”来覆盖摩卡“it”来支持“yield”

在我的testing中使用暂停程序包处理asynchronous调用时,我想以更“干”的方式来编写规格。 例如下面的代码 it('works like fifo queue', function(done) { suspend.run(function*() { yield transport.enqueue({a:1}); yield transport.enqueue({b:1}); (yield transport.dequeue()).should.eql({a: 1}); (yield transport.dequeue()).should.eql({b: 1}); }, done); }); 可以简化为: it('works like fifo queue', function*() { yield transport.enqueue({a:1}); yield transport.enqueue({b:1}); (yield transport.dequeue()).should.eql({a: 1}); (yield transport.dequeue()).should.eql({b: 1}); }); 如何覆盖摩卡的“it”函数来包装生成器函数?

Koa中的协程和发生器之间的区别?

Coroutines和Generators之间的区别对我来说是模糊的。 我会很感激,如果有人可以阅读文章callbackvs协程 – 看看callbackVS发电机vs协程 “ 在https://medium.com/code-adventures/174f1fe66127 …然后解释在这篇文章中说明/展示了发生器和协程之间的区别和竞争(标题中是否使用了“vs”)? 更一般地说,我的问题是这个区别究竟是什么,这种区分是否适用于在Koa中构build应用程序时(在Node.js中)如何区别处理asynchronous请求的编码模式?

Express-Generator(NodeJS)的'npm start'

我是NodeJS的新手,我试图用快速和快速生成器开始。 我用命令安装了express: C:\project>npm install -g express 然后我安装了express-generator模块: C:\project>npm install -g express-generator 然后我为该项目创build一个文件夹并安装de依赖项: C:\project\express> nodetest1 C:\project\nodetest1>npm install 一切工作正常,但是当我尝试启动服务器,出现问题与命令: C:\project\nodetest1>npm start 看来,服务启动,但它一开始就closures,结果: > nodetest1@0.0.0 start C:\project\nodetest1 > node ./bin/www C:\project\nodetest1> 当我尝试打开localhost:3000时,它不起作用。 我在网上search,我还没有find一个解决scheme,有人可以指导我如何解决这个问题? 谢谢。 更新1: 重新安装node.js并按照下面提出的步骤,现在我得到一个错误: C:\wamp\www\mynewapp>npm start > mynewapp@0.0.0 start C:\wamp\www\mynewapp > node ./bin/www npm ERR! mynewapp@0.0.0 start: `node ./bin/www` npm ERR! spawn ENOENT npm ERR! npm […]

我如何获得嵌套在两个分配函数和forEach循环内的值?

我正在写一个NodeJS模块,从Dropbox复制一堆文件夹,并根据文件夹结构创build一个目录。 令我头疼的部分是我需要获取主目录中所有文件夹的名称,然后才能获得文件夹中所有文件的名称,然后再转到下一个函数。 这是我现在的过程: 使用dropboxClient.readdir()获取主目录中的文件夹列表 遍历文件夹并获取名称子文件夹(再次使用dropboxClient.readdir()) 迭代这些子文件夹并获取文件的名称。 如果文件是降价文件,请将该名称添加到列表中 返回子目录中所有降价文件的列表 和一些伪代码: function getListOfFiles() { var subfolders = []; var fileNames = []; dbClient.readdir('', function(error, folders) { folders.forEach(function(folder, index) { subfolders.push(folder); dbClient.readdir('/'+folder, function(error, subfolders) { subfolders.forEach(function(subfolder, index) { dbClient.readdir('/'+folder+'/'+subfolder, function(error, files) { files.forEach(function(file, index) { if (isMarkdownFile) { fileNames.push(file) } }); }); }); }); } }); return fileNames; […]

我如何等待收益?

我有一个函数findOrCreateUser返回一个生成器。 但是我需要在函数done时调用一个callback函数。 我该怎么做呢? 我试着在发生器上调用next() ,但是结果正在等待。 passport.use(new FacebookStrategy({ clientID: fbConfig.appId, clientSecret: fbConfig.appSecret, callbackURL: 'http://localhost:' + (process.env.PORT || 3000) + '/auth/facebook/callback' }, function(token, tokenSecret, profile, done) { var user = yield userRepository.findOrCreateUser( profile.id, profile.name, 'pic'); return user; }) );

事件侦听器callback的Node.js生成器函数

我正在尝试节点的生成器函数,并与事件侦​​听器callback使用时得到问题。 请检查我正在使用的代码 function* fileLineByLine(file){ var fs = require('fs'), readline = require('readline'); var rd = readline.createInterface({ input: fs.createReadStream(file), output: process.stdout, terminal: false }); yield rd.on('line') } console.log(fileLineByLine('test.csv').next()) 任何人有一个想法?

生成器和迭代器用于pipe理stream的正确模式是什么?

我想弄清楚如何安排一对例程来控制使用ES2015中的生成器/迭代器函数写入stream。 它是一个简单的用于nodejs的日志logging系统 我想实现的是一个外部进程可以调用来写入日志的函数。我希望新的生成器/迭代器函数意味着如果需要挂起/在这个透明的例程中。 stream.write通常应该立即返回,但可以返回false来表示stream已满。 在这种情况下,它需要等待stream.on('drain',cb)才能返回 我正在考虑写入stream的实际软件是一个生成器函数,当它准备好接受另一个请求时产生,而我提供的允许外部人员调用stream的函数是一个interator,但是我可能会这样做错误的方式。 所以,这样的事情 var stopLogger = false; var it = writer(); function writeLog(line) { it.next(line); }) function *writer() { while (!stopLogger) { line = yield; if(!stream.write) { yield *WaitDrain(); //can't continue until we get drain } } }); function *waitDrain() { //Not sure what do do here to avoid waiting stream.on('drain', […]

ES6 – 并行地为多个用户帐户提出多个请求

我正在构build一个express.js Web应用程序,并且我需要为多个用户帐户并行请求多个请求,并返回一个对象。 我尝试使用generators和Promise.all但我有2个问题: 我不会并行运行所有用户帐户。 我的代码在响应已经返回后结束。 这是我写的代码: function getAccountsDetails(req, res) { let accounts = [ '1234567890', '7856239487']; let response = { accounts: [] }; _.forEach(accounts, Promise.coroutine(function *(accountId) { let [ firstResponse, secondResponse, thirdResponse ] = yield Promise.all([ firstRequest(accountId), secondRequest(accountId), thirdRequest(accountId) ]); let userObject = Object.assign( {}, firstResponse, secondResponse, thirdResponse ); response.accounts.push(userObject); })); res.json(response); }