Articles of asynchronous

Node.js – 寻找asynchronous函数

我在Node.js中寻找一个模块,它将为数组中的每个项目运行一个函数,但是暂停执行数组中的下一个项目,直到返回最后一个值。 我有async.concatSeries()运行一系列请求函数。 看起来像这样 var foo = [id,id,id]; function bar(){//do something then return value} async.concatSeries(foo, bar, function(err, result){//log result}); 我想返回所有这些与数组相同的顺序。 任何帮助将是伟大的,谢谢!

为什么需要async.js?

我以为JavaScript是非阻塞和asynchronous的,那么asynchronous给你什么? 我知道你得到一些像地图一样的function来激发多个“线程”,但是它呢? 我完全不熟悉javascript和nodejs。 编辑:我不是说“线程”,我的意思是像并行执行多个callback的外观。

node.js以同步的方式执行循环

我必须在Node.js中实现一个类似下面的代码片断的程序。 它有一个数组,虽然我不得不遍历并与数据库表项匹配的值。 我需要等到循环结束并将结果发送callback用函数: var arr=[]; arr=[one,two,three,four,five]; for(int j=0;j<arr.length;j++) { var str="/^"+arr[j]+"/"; // consider collection to be a variable to point to a database table collection.find({value:str}).toArray(function getResult(err, result) { //do something incase a mathc is found in the database… }); } 但是,作为str="/^"+arr[j]+"/"; (这实际上是一个正则expression式来传递给MongoDB的查找函数,以便find部分匹配)在find函数之前asynchronous执行,我无法遍历数组并获得所需的输出。 此外,我有困难的时间遍历数组,并将结果发callback用函数,因为我不知道什么时候循环完成执行。

async.eachSeriescallback调用多次

在这个function中: function method2(friends, callback) { //friends is an array of objects var ids = _.pluck(friends, 'id'), arrays = cut(ids, 24), //cut() splits array into smaller arrays of given length code = require('fs').readFileSync('…').toString(); var imp,j; async.eachSeries(arrays, function(i, cb1) { … vk.request('execute', {code:code}, function(err, resp, body) { //vk.request passes its callback to node-request module //at this point, […]

使用Node.js更好地理解callback

任何人都可以向我解释什么是在这里? 我一直在学习节点和callback,我有种得到的概念,但可以使用一些更多的细节。 所以在函数“myCallback”中有一个日志到控制台,但在“useItNow”没有日志到控制台,结果是“从myCallback使用它”在控制台。 我怎么不需要像使用它现在返回? 如果不是callback,这是否正确表示使用它? var usingItNow ='使用它' 有人可以发布一些好的内容的链接? 是使用它现在适当camelcase或应该使用它? var myCallback = function(data) { console.log('from myCallback ' + data); }; var usingItNow = function(callback) { callback('From Using it'); }; usingItNow(myCallback);

承诺的节点模式

我有一个节点问题。 我想调用一个数据访问对象,可能还有其他的内容,一旦完成渲染一个Jade模板 就像是 : provider1.getData(args, function(error, results) { /* do something with each result element */ for(int i = 0l i < results.length; i++) { provider2.getData(args, function(error, items) { store.push(items); }); } }); /* Here I want to ensure that the above operations are complete */ result.render( …. , { data:store }); 基本上,我想确保数据检索完成之前,我与数据呈现模板。 目前,渲染发生时,variables存储不会被填充。 我看过看起来很有希望的承诺。 […]

如何推迟承诺,直到async.each完成?

如何在asynchronous操作完成之前延迟承诺? 我正在使用asynchronous和蓝鸟图书馆。 只要我启动我的程序,done()函数返回一个空的或接近空的'masterlist'对象的错误。 为什么在迭代器完成操作之前不是asynchronous等待呢? // bundler.js var masterlist = { "children": [] , "keywords": [] , "mentions": 0 , "name" : "newsfeed" , "size" : 0 } // initialize() returns a promise with the populated masterlist exports.initialize = function() { return new Promise(function(resolve, reject) { // pullBreakingNews() returns a promise with the breaking news articles […]

我如何使用arr.forEach来调用asynchronousJavaScript的redis调用?

我正在使用node.js和redis。 我有一堆key的redis数据库。 像这样的东西: 用户/克里斯/药水用户/皮特/药水用户/克里斯/种族用户/皮特/种族用户/克里斯/武器用户/皮特/武器 我想做一个redis调用,它检索所有的用户状态,把统计信息放到一个JS对象中,然后传递给客户端在浏览器中显示字符统计信息。 使用javascript我把用户名chris注入到redis调用中,像这样: KEYS user/u/* 它返回: 1) "user/chris/weapon" 2) "user/chris/race" 3) "user/chris/potion" 现在我可以迭代这些结果,用GET获取每个键的值,并创build一个javascript对象。 看起来超级简单,所以我写的代码。 我很快遇到了使用forEach的问题: var redis = require('redis'); var client = redis.createClient(); exports.getUserObject = function(requesteduser, callback) { var userstats = {}; // the object to hold the user stats once retrieved from the db client.KEYS('user/' + requesteduser + '/*', function(err, replies) […]

如何发送variables的当前值到asynchronouscallback

我有这个问题相同的问题,但不能得到解决scheme的工作。 我正在尝试编写一个nodejs脚本,它将首先检查mongo中的caching值,但是如果它不存在,那么就closures并计算它。 问题是,findOne()callback没有得到循环variables的原始值,所以callback不能正确计算和存储的价值。 (我已经省略了实际的提取,存储和返回,以专注于我有的实际问题)。 无论我做什么,我都无法获得原始价值来回馈。 for (var d=start_date; d<now; d.setHours(d.getHours()+1)) { (function(key) { console.log('caller='+key) db.collection('avgs').findOne( { date: key.toISOString() },function (err,data) { console.log('callback='+key); if (data) { //return data } else { // compute average for given date , insert into database and return value } }); })(d); }; 控制台日志显示了这一点 caller=Tue Mar 25 2014 00:00:00 GMT+1030 (CST) […]

为什么queryAsync()会导致添加元数据?

我使用queryAsync()按问题的答案规定,它的工作原理,但它增加了很多额外的元数据到我的查询结果,否则是一个简单的查询。 以下是我用来处理/执行查询并logging结果的内容: var retrieveSettings = Promise.method(function (username, connection) { console.log('User ' + username + ' retrieving settings…'); var q = 'select * from sales_settings'; return connection.queryAsync(q).then(function (rows, fields) { list = []; for (x = 0; x < rows.length; x++) { list.push(rows[x]); } //console.log('Settings: ' + JSON.stringify(list, null, 4)); return list; }); }); 这里是logging的结果: Settings: […]