Tag: asynchronous

在redis中使用nodejsasynchronous请求进行循环

我有一个redis和nodejs的问题。 我必须遍历电话号码列表,并检查这个号码是否存在于我的redis数据库中。 这是我的代码: function getContactList(contacts, callback) { var contactList = {}; for(var i = 0; i < contacts.length; i++) { var phoneNumber = contacts[i]; if(utils.isValidNumber(phoneNumber)) { db.client().get(phoneNumber).then(function(reply) { console.log("before"); contactList[phoneNumber] = reply; }); } } console.log("after"); callback(contactList); }; “之后”控制台日志出现在“之前”控制台日志之前,callback总是返回一个空的contactList 。 这是因为如果我理解的很好,对redis的请求是asynchronous的。 但事情是我不知道如何使它的工作。 我能怎么做 ?

诺言瀑布

我是一个API开发人员,通常写端点需要从一个asynchronous调用结果传递到另一个asynchronous调用又名asynchronous瀑布。 我通常使用promise来做到这一点: task1() .then(result1){ task2(result1) .then(result2){ task3(result2) .then(result3){ // API response }) .catch(function(err){ // Task 3 handle err }) }) .catch(function(err){ // Task 2 handle err }) }) .catch(function(err){ // Task 1 handle err }) 很明显,使用callback函数没有太多的收获。 现在我得到了“承诺地狱”,而不是“回拨地狱”。 我曾经看过npm蓝鸟,但是似乎没有支持瀑布的承诺。 有时我会使用asynchronous并包装的任务返回一个承诺: const tasks = [ job1: function(cb){ task1() .then(function(result){ cb(null, result); }) .catch(function(err){ cb(err); }) }, job2: […]

Node.JS + Mongoosecallback地狱

我怎样才能将mongoose保存到数据库,但等待其他收集首先加载? 平台和stream派是空的,因为“保存”function在平台和stream派加载之前运行,请帮助! var platforms = []; //load platforms body.release_dates.forEach(function(elem){ Platform.findOne({ id : elem.platform}, function(err, result) { platforms.push(mongoose.Types.ObjectId(result._id)); }); }); var genres = []; //load genre body.genres.forEach(function(elem){ Genre.findOne({id: elem}, function(err, result){ genres.push(mongoose.Types.ObjectId(result._id)); }) }); //prepare to save! var game = { igdb_id : body.id, name : body.name, summary : body.summary, storyline : body.description, genres : genres, […]

有什么办法可以在NodeJS中没有callback的情况下执行命令

我想连接MongoDB并find一些文件。 事实是,我将在所有模块中使用这个客户端( mongo )。 这意味着它是共享的 。 我做了一个模块,并build立了一个connect()函数。 我也find(params)函数。 当我在类之外执行connect()然后find() , find()在mongo连接到db之前被执行。 这是因为NodeJS的本质。 意味着async 。 但是,我怎么能等待连接build立,然后执行我的查询? Python有asyncio,但我仍然可以连接,然后执行我的查询没有callback…我使用NodeJS只是因为SocketIO,但现在我真的想如果即时通讯selectNodeJS和切换到Python做错了。 任何人都可以给我一些东西,我可以写更好的代码? 任何文件阅读? 或者这种情况下有什么窍门? 比如我查询数据库(postgresql),这个查询返回一个数据。 我必须处理这些数据,但是我不能按顺序做。 我再次使用callback。 如果我遵循NodeJS规则,它看起来像callback in a callback in a callback in a callback…..就像这样。 更基本的说,可以说一个请求已经对NodeJS,我不得不查询3个不同的SQL文本。 他们每个人都依赖于之前。 我必须在每个callback中实现3个查询和callback。 我明白这个错误吗? 自从7个小时以后,我就开始疯狂起来。 我喜欢asynchronousfunction。 真。 但是我应该怎么处理这种情况呢?

使用外部asynchronous

有没有办法让JavaScript的关键字工作以外的asyncfunction? 我希望能够冻结整个调用堆栈(而不仅仅是async函数的其余部分),一旦特定的承诺返回一个值就可以恢复。 可悲的是,像这样的强大的await目前正在实施或尚未实施。 我试图使nodent.js工作,但由于我的自定义加载器和dynamicfunction,这是不幸的。

如何等待所有asynchronous任务在Node.js中完成?

我的程序需要运行许多asynchronous任务。 当所有asynchronous任务完成时,一个任务必须运行。 如何让这个函数等待所有的asynchronous函数? let urls=[….] for(var i=0; i<urls.length; i++){ doRequest(urls[i]) } finish() function doRequest(url){ request({ uri: url, }, function(error, response, body) { //do some tasks }); } function finish(){ console.log('finish') }

函数完成前使用callback执行callback

我会写下面的代码来练习JavaScript中的callback函数。 fs = require('fs'); function funcWithCallback(callback) { fs.readFile('YouBikeTP.txt', 'utf8', function (err,data) { if (err) { return console.log(err); } console.log(data.length); }); callback(); } funcWithCallback(function(){ console.log("string in callback ") }) 代码的目的是试图控制方法执行的顺序。 string“callback中的string”应打印文本文件的长度后打印,但是当我跑这个代码的结果是: >> "string in callback" >> 91389 //the length of YouBikeTP.txt 这不是我预期的结果。 应该 >> 91389 //the length of YouBikeTP.txt >> "string in callback" 任何人都可以告诉我为什么在funcWithCallback(callback)完成之前调用callback函数? 我误解了callback函数的含义吗?

在Node.js中,如何以编程方式从一个redis数据库中检索许多散列值,并使用一组作为索引

所以我在我的redis数据库中为每个用户都有一大堆字段,我希望能够检索所有logging并显示它们。 我这样做的方式是存储一组所有userids,当我想要所有的logging,我recursion地迭代设置抓住他们的logging使用集中的userids,并将它们添加到一个全局数组,然后最后返回这个全局数组。 无论如何,我不是特别喜欢这种方法,并希望听到一些替代scheme的build议,我觉得必须有更好的function在node.js或redis这个问题。 也许有一种方法可以完全避免使用这个设置,但是四处看看我什么都看不到。 这是我的psuedoish(相当完整的)node.js代码的一个例子,注意set的大小不是问题,因为它很less会大于15。 寄存器function: var register = function(username, passwordhash, email){ // Get new ID by incrementing idcounter redis.incr('db:users:idcounter', function(err, userid){ // Setup user hash with user information, using new userid as key redis.hmset('db:user:'+userid, { 'username':username, 'passwordhash':passwordhash, 'email':email },function(err, reply){ // Add userid to complete list of all users redis.sadd('db:users:all', userid); } }); }); […]

Opastream量控制,螺纹?

Node.js本身支持工作线程和subprocess的创build。 那些和Node.js一起工作的人可能熟悉stream控制库,如Async.js或Step。 现在,因为Opa在Node.js堆栈上运行,有没有办法使用Async.js库作为JavaScript模块? 有没有Opa语言的绑定允许线程或某种asynchronousstream量控制? 我怀疑没有,但我很好奇在Opa中实现线程或asynchronousstream量控制的可能select是什么? *现在我知道我可以用非Opa语言将我的作品提交给另一个剧本,但这是我唯一的select吗? 在此先感谢,因为我是Opa的新手,并且正在努力了解它的function!

同步使用Node.js下载N个远程文件

我正在使用一个简单的应用程序使用Node.js需要执行以下操作时给予一个有效的URL 检索远程页面的HTML,保存在本地。 蜘蛛的HTML(使用cheerio)并logging所有的JS和CSS文件引用。 为每个JS / CSS文件创buildHTTP请求并通过文件名将其保存到服务器。 压缩html,css和js文件并将结果文件stream式传输到浏览器。 我有1和2个工作,而#3的前半部分,但我遇到的下载同步性的问题。 我的代码运行得太快,为CSS和JS文件生成文件名,但没有任何内容。 我猜这是因为我的代码不同步。 问题是,我不能预先知道有多less文件可以在ZIP文件生成之前,所有文件都必须在那里。 这是我的应用程序的stream程,因为它目前存在。 我省略了辅助方法,因为它们不会影响同步性。 你们能提供什么我应该做的input吗? http.get(fullurl, function(res) { res.on('data', function (chunk) { var $source = $(''+chunk), js = getJS($source, domain), css = getCSS($source, domain), uniqueName = pw(), dir = [baseDir,'jsd-', uniqueName, '/'].join(''), jsdir = dir + 'js/', cssdir = dir + 'css/', html = rewritePaths($source); // […]