Tag: asynchronous

NodeJS:从asynchronous函数中返回数据

我试图编写一个函数来创build一个新的用户在我的数据库(mongodb),然后返回该用户作为我定义的对象。 但是,由于插入用户的调用是asynchronous的,result.nInserted总是未定义的,因为asynchronous代码没有及时完成。 因此,我永远不会回到我的用户。 我会尝试使用callback来获取用户完成插入后,但那么我将如何能够从我原来的addUser函数返回数据? User.addUser = function(db, email, username, password, firstname, lastname, company, twitter){ var _id = new mongodb.ObjectID(); var result = db.get('users').insert({ _id: _id, email : email, verified : false, password : password, username : username, firstname : firstname, lastname : lastname, company : company, twitter : twitter, rank : config.RANK_USER }); return result.nInserted […]

在NodeJS中pipe理两个命令

我需要将一个CLI转换为nodejs中的“spawn”语法,而我陷入了一丝混乱,无法从文档中找出如何处理它。 语法是这样的: somecommand -a op1 -b op2 | othercommand -c op1 -d op2 “其他命令”应该从“somecommand”输出“live”。 我想监视“othercommand”的输出。 谢谢,Tal。

从多个asynchronousfunction(承诺)收集数据

鉴于您必须从多个asynchronous函数或承诺获取数据的情况,收集和保存数据的最佳方法是什么? 一个示例情况是多个数据库查询需要在单个页面中呈现。 我遇到了下面的代码,这对我来说看起来像一个固定的模式,但是对于asynchronous游戏来说,新的东西是不确定的。 function complexQuery(objectId) { var results = {}; return firstQuery.get(objectId).then(function (result1) { results.result1 = result1; return secondQuery.find(); }) .then(function (result2) { results.result2 = result2; return thirdQuery.find(); }) .then(function (result3) { results.result3 = result3; return results; }); } complexQuery(objectId) .then(function (results) { //can use results.result1, results.result2, results.result3 res.render('dash', results); //example use }); 处理这种情况的最好办法是什么? 编辑澄清:必须在一系列,查询可能需要从前面的承诺结果的信息。

Async.map – 使其忽略错误,并处理整个列表

我必须使用asynchronous处理数组 var arr = [1,2,3,4]; Async.map(arr, iterator, callback); 我无法控制的iterator函数会抛出所有值的错误,比如4 。 function iterator(val, cb) { console.debug('processing', val); if (val == 4) cb(); else cb(new Error(val)); } asynchronous会做什么 如果iterator将错误传递给callback函数,则主callback函数(对于map函数)立即被调用并返回错误。 所以我明白了 processing 1 [Error: 1] processing 2 processing 3 processing 4 我想要的是它不应该立即调用带有错误的callback函数,而是等待它处理整个列表,然后调用callback函数。 这可能吗? 还是有一种替代Async.map这样的行为?

问题与async.parallel

这个问题,我相信,是一个exceptionstream动和不正确的平行工作对我来说… 所以,我有两个function。 第一个函数是更新数据库variables(主机,名称,login,传递),它从leveldb获取这些值。 代码如下: function refreshDbValues (whendone) { async.parallel([ function (callback) { db.get('dbhost', function (err, value) { if(err) callback(err); dbhost = value; console.log('host ' + dbhost); callback(null); }); }, function (callback) { db.get('dbname', function (err, value) { if(err) callback(err); dbname = value; callback(null); }); }, function (callback) { db.get('dblogin', function (err, value) { if(err) callback(err); […]

为什么没有承诺的testing通过?

前几天我进入了一个美好的诺言世界,我只是觉得我已经开悟了。 承诺看起来很简单,但他们可以混淆。 你能告诉我为什么下面的testing不通过? var Promise = require('bluebird'); var expect = require('chai').expect; var request = Promise.promisifyAll(require('request')); describe('Promise', function() { it('should work again', function() { var final_result; function first_promise() { return new Promise(function(resolve, reject) { resolve("http://www.google.com"); }) } function second_promise() { return new Promise(function(resolve, reject) { resolve("This is second promise!"); }) } function inner_async_request(url_from_first_promise) { return new […]

使模块asynchronous – nodejs

我有以下function,我导出到其他地方使用async.series方法。 但是,当我在IDE的debugging器中运行apiCaller._get时,它在执行get请求之前返回undefined 。 获取请求被执行。 但是`apiCaller._get不是asynchronous的,我知道它需要callback,但我不明白在哪里调用callback。 var http = require("http"); var querystring = require("querystring"); var _ = require("underscore"); apiCaller = {}; apiCaller.token = null; var server=http.createServer(function(req,res){}); server.listen(8080); apiCaller._get = function (context, config, TheCallback) { // get the parameters for our querytring var oauthParams = _.pick(config, "client_id", "client_secret", "grant_type"); // create the querystring var params = querystring.stringify(oauthParams); […]

如何让我的节点应用程序同时执行1000个asynchronous操作?

一旦用户input网站地图,这是我希望我的节点应用程序执行的过程。 1)所有来自站点地图的URL都被抓取 2)访问每个url,并提取元数据(使用cheerio) – 并保存到数据库 3)每个url的社交计数都被提取并保存到db中 4)每个url再次访问,链接从url中提取 5)每个链接的url都被访问,状态码被检查并保存到数据库 我已经为上述每个步骤(使用asynchronous模块)编写了控制器操作,并且单独地他们正常工作,虽然当有一个大网站时,步骤#4可以去20k或30k不同的url,然后第5步实际访问如果setTimeout不够快,他们会导致相当多的503错误,所以我的问题是,执行上述过程的最好方法是什么? 正在和一位朋友交谈,他build议我研究一下Kue或者RabbitMQ,但是我从来没有和任何这样的基于队列的模块合作过,所以给了我想要达到的,不太清楚最好的方法是什么 对上述的反馈将是太棒了

使用JavaScript和Node.js进行asynchronousrecursion

这可能是一个noob的JavaScript问题,但我期待知道我的解决scheme是否是“正确的” 我创build了下面的示例应用程序,重新创build我的错误: 首先在index.js中 var processor = require('./fileProcessor/processor.js'); var container = { source: "source.txt", destination: "destination.txt" }; new processor().process(container); 我创build了我的容器对象,它具有源文件的名称和目标文件的名称。 这被传递给处理器的处理function: var fileProcessor = require('./fileProcessor.js'); module.exports = function Processor() { this.process = function(container) { var file = new fileProcessor(); if(container.finished === undefined) { if(container.body === undefined) { file.read(container, this.process); } else { file.write(container, this.process); } } […]

以asynchronous方式填充数组

我有两个数组,填充其中的一个随机数字: var arr1 = [1]; var arr2 = []; function arr1Filler() { arr2 = arr1; setTimeout(function() { for (var i = 0; i < 3; i++) { arr1[i] = Math.floor(Math.random()*5); } console.log('array 1:'); console.log(arr1); console.log('array 2:'); console.log(arr2); }, 500); } setInterval(arr1Filler, 1000); 在这个例子中,为什么这两个数组总是相等的。 换句话说,为什么我得到这样的东西: array 1: [ 3, 0, 1 ] array 2: [ 3, […]