Tag: asynchronous

等待一个asynchronous函数在Node.js中返回

假设,我在Node.js中有一个asynchronous函数,基本上是这样的: var addAsync = function (first, second, callback) { setTimeout(function () { callback(null, first + second); }, 1 * 1000); }; 现在我当然可以用asynchronous风格调用这个函数了: addAsync(23, 42, function (err, result) { console.log(result); // => 65 }); 我想知道的是,是否可以使它以某种方式同步调用此function。 为此,我想有一个包装函数sync ,基本上做以下事情: var sync = function (fn, params) { var res, finished = false; fn.call(null, params[0], params[1], function (err, result) { […]

每个和callback

我正在使用请求和cheerio节点模块创build从网站获取一些数据。 我想获得一个项目列表,一旦这个列表完成,调用一个asynchronous函数: request('http://myurl', function(req,res,data){ var $ = cheerio.load(data); var List = []; $('.myItems').each(function(i, element){ console.log( typeof $(this).text() ) List.push($(this).text()); }); for (var i=0; i < List.length; i++){ // make an asynchronous call to a API } }); 我的问题是我如何等待列表完成,即我怎么能知道.each函数已遍历所有项目? 我可以用asynchronous吗? 谢谢

asynchronous瀑布传递参数

我有一个关于在async.waterfall()中传递参数到第三个函数而不是第一个函数的问题。 例如,如下所示 async.waterfall([ first, second, async.apply(third, obj) ], function(err, result){}); 现在可以在名为third的函数中使用“obj”作为参数,也可以使用从名为second的函数的callback函数传递的参数

是否有可能编写asynchronousNode.js代码“更清洁”?

在Node.js中进行编码的时候,遇到很多情况,很难实现一些与数据库查询(I / O)混合的详细逻辑。 考虑用python编写的例子。 我们需要迭代一个值的数组,对于我们查询数据库的每个值,然后根据结果计算平均值。 def foo: a = [1, 2, 3, 4, 5] result = 0 for i in a: record = find_from_db(i) # I/O operation if not record: raise Error('No record exist for %d' % i) result += record.value return result / len(a) Node.js中的相同任务 function foo(callback) { var a = [1, 2, 3, […]

在承诺fs.writeFile,asynchronous同步的东西

我需要一些帮助我的代码。 我是nodejs的新手,遇到很多麻烦。 我在做什么: 1)使用Amazon产品(ASIN's)获取.txt文件 2)使用amazon-product-api软件包获取所有产品 3)将每个产品保存在.json文件中 我的代码不工作。 我想我搞砸了这个asynchronous同步的东西 – 帮助我! var amazon = require('amazon-product-api'); var fs = require('fs'); var client = amazon.createClient({ awsId: "XXX", awsSecret: "XXX", awsTag: "888" }); var array = fs.readFileSync('./test.txt').toString().split('\n'); for (var i = 1; i < array.length; i++) { var ASIN = array[i]; return client.itemLookup({ domain: 'webservices.amazon.de', responseGroup: 'Large', idType: 'ASIN', […]

NodeJSasynchronous队列速度太快(asynchronous队列方法减速)

我有一个HTTP Get请求,我想分析响应并将其保存到我的数据库。 如果我叫爬行(我)独立我得到好的结果。 但是我必须从1到2000调用crawl()。我得到了很好的结果,但是有些响应似乎会丢失,有些响应是重复的。 我不认为我知道如何调用数千个asynchronous函数。 我正在使用asynchronous模块队列function,但到目前为止,我仍然缺less一些数据,仍然有一些重复。 我在这里做错了什么? 谢谢你的帮助。 我在爬行 我的节点function: function getOptions(i) { return { host: 'magicseaweed.com', path: '/syndicate/rss/index.php?id='+i+'&unit=uk', method: 'GET' } }; function crawl(i){ var req = http.request(getOptions(i), function(res) { res.on('data', function (body) { parseLocation(body); }); }); req.end(); } function parseLocation(body){ parser.parseString(body, function(err, result) { if(result && typeof result.rss != 'undefined') { var locationTitle […]

作为一个单独的node.js进程运行一个函数?

是否有可能作为一个完全独立的node.js过程来运行一个函数? 例如: var parallel = require("parallel"); parallel(function(){ var app = require("express")(); app.on("/",function(req,res){ res.send("hi"); }); app.listen(80); },function callback(err,stdout){ console.log("process terminated!") }); 是这样的可能吗?

嵌套的asynchronous循环推送到不调用主callback的asynchronous队列

我有一个asynchronous队列,我正在推动哪些会做些什么。 我生成需要插入的项目的方法是通过几个嵌套列表形成一个数据对象。 队列结束了处理所有事情,但由于某种原因,我无法通过console.log('All done.')主要的callback。 我已经删除了大部分不必要的东西,只剩下asynchronous的东西。 我究竟做错了什么? 我错过了什么吗? var q = async.queue(function(task, callback) { console.log('hello ' + task); callback(); }, 2); function A(data) { B(data, function() { // THIS ISN'T getting called. console.log('All done.'); }) } function B(data, callback1) { var list = [[1,2], [3,4], [5,6]]; async.each(list, function(item, callback1) { async.each(item, function(i, callback2) { doWork(i, function() […]

数据库连接池处理节点js应用程序的最佳做法?

我指的是下面的node-postgres包,但我想这个问题是相当通用的。 有这样一个简单的例子 ,你1)从顶级http请求处理程序池中获取(连接)一个连接(客户端),2)做该处理程序内的所有业务,3)释放它回到池之后,重做。 我猜这个例子可以正常工作,但是一旦你的应用程序变得稍微大一些,这个问题就会很快出现。 我正在考虑这两个选项,但我不太确定… 在任何需要与db进行交谈的地方执行“获取客户端+工作+发布客户端”的方法。 这似乎是一个不错的select,但是不会导致每个顶级http请求吃掉多个连接/客户端(在我的项目的许多地方有并行的asynchronous数据库调用)? 尝试将一个全局共享引用分配给一个客户端/可通过require()访问的连接 这是一个好主意,实际上可行吗? 是否可以很好地处理在所有丑陋的情况下“回到池释放”(例如并行asynchronous的东西的错误)? 谢谢。

NodeJS在多次请求后无限期地挂起

我有一个nodeJS(v.0.10.23)代理连接到postgres数据库(node-postgres模块v2.1.0),以及返回各种json数据的pgpool-II。 回到当天,这是如何处理连接错误: var after = function(callback) { return function(err, queryResult) { if(err) { response.writeHead(500, _header); console.log("ERROR: 500"); console.log(err); return response.end(JSON.stringify({error: err})); } callback(queryResult) } }; 基本上它所做的是在没有错误的情况下消耗响应。 可以在这里find一个深入的解释: Node js – http.request()连接池的问题 使用上面的函数,我有这样的东西: pg.connect(_conString, after(function(err, client, done) { client.query(sql, after(function(result) { … done(); } 由于当函数传递到after()scallback函数时上下文丢失了,所以我放弃了使用pg.connect()传递的先天done()方法的能力。 删除后解决了这个问题,但随后,在适当的时间,并有相当数量的客户端拉数据,节点将挂起,直到它被重置。 是否有消耗各种asynchronous响应的不同方式? 或者可能是一种将pg.connect上下文传递给callback的方法?