Tag: asynchronous

如何控制NodeJS中的应用程序stream

我在nodeJS中编写我的第一个应用程序。 我正在写一个电报机器人,我想知道如何控制应用程序的stream程,因为它是asynchronous的。 我来自一个简单的,程序性的,一个接一个的php背景。 比方说,在我的机器人,收到任何消息时,首先程序必须确保用户的详细信息在caching或数据库中,然后再继续。 检查完成后,可以继续。 我打算通过使用一个标志variables来做到这一点,但由于JavaScript的asynchronous性质,无法完成。 我不知道如何去做这件事。 我是否将侦听器分配给对象并发出事件来控制stream? 这是我的代码 const fs = require('fs'); // Establish connection with cache and database const mysql = require('mysql-wrapper'); const Memcached = require('memcached'); const memcached = new Memcached('localhost:11211'); const bb = require('bot-brother'); var settings = { host: 'localhost', database: 'test', user: 'root', }; var qb = require('node-querybuilder').QueryBuilder(settings, 'mysql', 'single'); //Load […]

如何以时间顺序运行摩卡testing?

我有一套基于全局事件发射器运行的模块。 他们按照时间顺序的事件运行,如下所示: boot.ready 服务器创build(因为boot.ready事件) 服务器configuration(由于server.created事件) 因此,我需要创build一个server-test.js按照时间顺序执行testing。 摩卡这可能吗? 像下面的东西? var EventEmitter2 = require('eventemitter2').EventEmitter2, should = require('should'); describe('server', function() { var mediator = new EventEmitter2({ wildcard: false }); require('../../src/routines/server/creator')(mediator); require('../../src/routines/server/configurer')(mediator); it('should be created after boot', function(done) { mediator.once('server.created', function(server) { server.should.exist; done(); }); it('should be configured after created', function(done) { mediator.once('server.configured', function() { done(); }); }); mediator.emit('boot.ready'); […]

我如何使用节点asynchronous来获取我的mongoose电话?

我正在build立一个node / express / mongoose的网站,在查看提交时需要做以下的事情。 我遇到的问题是以非串行方式进行数据库读取。 例如,我会做一些调用来获取一些数据,但是一些调用可能不会完成,直到执行环境转到另一个。 试图使用npm模块,async,但是在尝试弄清楚我将如何整合它时遇到困难。 这是我的代码: var getViewCount = function(submissionId) { Submission.getSubmissionViewCount({ submissionId : submissionId }, function(err, count) { if (err) { throw err; } if (count) { return count; } }); }; var getVotes = function(submissionId) { console.log('getvotes'); Submission.getSubmissionVotes({ submissionId : submissionId }, function(err, votes) { return votes; }); }; var […]

Node.jsasynchronouseachLimit如何在这种情况下工作?

我写了一个小async脚本来批量插入大量的JSON文件到MongoDB分片集群中。 这是我第一次使用这个模块(而且我还在学习Node.js)。 我不知道我是否做对了。 该代码是瀑布(1)的最后一部分:以前的函数结束与db , coll和files属性的对象。 files数组包含数百个文件path,并且应用于数组的每个元素的函数又是一个瀑布(2)。 瀑布(2)由以下内容组成:读取,parsing,插入。 当这个瀑布结束时(3)我调用complete完成数组中单个项目的处理,传递错误(如果有的话)。 到目前为止这么好,对吗? 我不明白的是在async.eachLimitcallback(4)内发生了什么。 从文档: 在所有迭代器函数完成之后调用的callback,或发生错误。 也就是说,当所有函数完成后, next()调用(5)结束脚本。 但是,当按照文档发生单个错误时,会调用相同的callback函数(4)。 这是我的脚本停止时发生单个文件的失败。 我怎样才能避免这一点? async.waterfall([ // 1 // … function (obj, next) { async.eachLimit(obj.files, 1000, function (file, complete) { async.waterfall([ // 2 function (next) { fs.readFile(file, {}, function (err, data) { next(err, data); }); }, function (data, next) { // Parse […]

在callback中调用asynchronous函数

我在理解asynchronous函数时遇到了一些麻烦。 我已经阅读了Mixu的Node Book中的章节,但是我仍然无法将它包裹起来。 基本上我想请求一个资源(使用节点包cheerio ),parsing它的有效URL,并添加每一个匹配我的redis集setname 。 问题是,最后只是将第一个匹配添加到redis集。 function parse(url, setname) { request(url, function (error, response, body) { if (!error && response.statusCode == 200) { $ = cheerio.load(body) // For every 'a' tag in the body $('a').each(function() { // Add blog URL to redis if not already there. var blog = $(this).attr('href') console.log("test [all]: " + […]

setTimeout函数和asynchronous函数

这是关于如何setTimeout执行其callback。 我有以下几点 function f1 (argument) { console.log('f1 start'); for(var i = 0; i < 100000; ++i) for(var j = 0; j < 10000; ++j); console.log('f1 complete'); } function f2 (argument) { console.log('f2 start'); for(var i = 0; i < 1000; ++i) for(var j = 0; j < 10000; ++j); console.log('f2 complete'); } function f3 (argument) […]

如何在Node.JS中编写一个asynchronouswhile循环

我正在编写一个node.js应用程序来帮助自动化我的一些家酿酒厂。 我正在使用的一个模块是一个PIDalgorithm来控制输出,使它们保持一定的设定值。 我目前正在通过一个while循环,但是我认为这个代码将被阻止。 任何帮助使这个更有效和asynchronous将不胜感激。 这是我的控制循环: device.prototype.pid_on = function(){ while(this.isOn){ this.pid.set_target(this.target); // make sure that the setpoint is current var output_power = this.pid.update(this.current_value); // gets the new output from the PID this.output.set_power(output_power); }; }; 为了便于阅读,我稍微改了一下,但基本上就是这样。 它只会循环,调整输出,然后反馈新的input值。 我希望循环继续运行,直到设备closures。 显然,我需要这个非阻塞,这样我可以继续控制其他设备,而PID正在运行。 目前,我只是调用相当于device.pid_on(); 在我的代码。 我有一个想法是使用一个空的callback,这将使这个非阻塞? device.prototype.pid_on(calback){ while (this.isOn){…}; callback(); }; //call later in code device.pid_on(function(){}); 感谢任何/所有的帮助!

在Node.js中,如何asynchronous创buildsha512哈希?

var crypto = require('crypto'); var sha = crypto.createHash('sha512').update(String(s)); var result = sha.digest('hex'); 这是我现在的代码。 我如何做这个asynchronous? 我打算做10万次。

收听注册后的事件是否安全?

我是NodeJS的新手,我正在学习如何使用stream。 读一本书我发现这个示例代码: var CountStream = require('./countstream'); var countStream = new CountStream('book'); var http = require('http'); http.get('http://www.manning.com', function(res) { res.pipe(countStream); }); countStream.on('total', function(count) { console.log(); }); 在这个代码片段中,我们调用http.get方法,然后等待callback( 第1部分 )。 在下一行,我们正在听total事件( 第2部分 )。 问题:如果第一部分和第二部分之间发生延迟,那么第一部分的callback会先执行(在第二部分开始监听total事件之前),那么第一个数据块是否会丢失?

如何在sails.js中一次执行多个查询

例如,我有一个模型钱包。 我需要执行几个操作。 我们说: Async.waterfall([ Wallet.findOne(criteria1).exec(cb1); Wallet.update(criteria2).exec(cb2); Wallet.findOne(criteria3).exec(cb3); Wallet.update(criteria4).exec(cb4); ], …); 不完全正确的ASync语法,不pipe。 据我所知,这将是一个接一个的数据库服务器的四个连接。 是否可以通过一个连接执行所有操作?