Articles of asynchronous

Node.jsasynchronous循环,从下一个循环前的函数callback

我有一个async.whilst循环,在每个循环中循环一个名为hashtag的string数组。 在for循环中, searchTwitter()函数被触发。 我需要for循环暂停,直到从searchTwitter()函数返回一个callback,然后暂停2秒,然后for循环继续到hashtag数组中的下一个string传递给searchTwitter() 。 在循环结束之后,async.whilst循环中有一个超时,持续10秒,while循环再次重新加载for循环。 我下面的代码立即触发所有的searchTwitter()函数,而无需等待callback或setTimeout(callback,2000) : async.whilst( function () { return 0 == 0 }, function (callback) { for (var i = 0; i < hashtag.length; i++) { searchTwitter(hashtag[i]); setTimeout(callback, 2000); } setTimeout(callback, 10000); }, function (err) { } ); function searchTwitter(tag, callback){ T.get('search/tweets', { q: '#fun', count: 100 }, function(err, data, response) […]

async.series:可变数量的callback

我正在使用Node.js(Express)和MongoDB(mongooseJS)。 我想要创buildasynchronous函数(一个接一个地,以正确的顺序查询数据库); 问题是:如何创build可变数量的async.series函数,如下所示: var supply = [0]; async.series([ function(callback) { Model.find({ color: user.color[supply] }).exec(callback); }, ],function(err, results){ res.send('Chosen colors: ' + results); }); 如果 – 可以说 – 可变电源= [0,1,2], 那么callback函数将被放置三倍,0,1和2放置在那里: var supply = [0, 1, 2]; async.series([ function(callback) { Model.find({ color: user.color[supply] }).exec(callback); // supply = 0 }, function(callback) { Model.find({ color: user.color[supply] }).exec(callback); // […]

Javascriptasynchronous调用链接

给定一个包含typesA和B的对象的数组,其中B可以通过asynchronous调用转换为一组Atypes对象,这将是将数组转换为全A对象数组的最佳方式(将每个B对象在一组相应的A对象中)并在Bs被转换时执行callback? list = [A, B, A, B, A, A, B, A]; function transform (B, callback) { //transform B type object into A type objects array [A, A, A]….. callback([A, A, A]); } transformBObjectsIntoAObjects(list, callback) { // ????????? callback(list); // this should only be A type objects }

节点Mongoose的MongoDb和asynchronous性

我希望能有一个比我更多的知识的人一个快速的问题。 如果我有一个基本上创build一个实体并使用Mongoose将其直接保存到MongoDB的Node api实现中的代码,是否需要将所有包含在承诺库中的代码包装为尽可能asynchronous? 或者Mongoose / MongoDB Node库的实现已经以asynchronous的方式完成了他们的工作,所以我唯一的消息泵开销就是对象的创build。 下面的代码是我们在API中的代码,它创build了下面的承诺并执行它,我只是想知道,如果Mongoose / MongoDB库是asynchronous的,承诺的开销实际上是否值得。 希望一切都有道理。 function action(promise) { var date = new Date(), taskWorkQueue = new TaskWorkQueueModel({ "TaskId": taskid, "metadata": metadata, "State": 0, "TaskType": taskType, "ApplicationName" : token.ApplicationName , "dateEntered": date}); taskWorkQueue.save(function (err) { if (err) { promise.reject(err); } else { promise.resolve(taskWorkQueue); } });

什么函数应该是asynchronous的(放在Node.js中)?

我对这个问题的了解一般都很低,所以请耐心等待。 我明白,可能需要额外延迟的function,如数据库读取/写入,文件读取等应该asynchronous运行,以免阻塞。 我的search后没有真正回答的是: 应该像一个简单的for循环asynchronous运行? 这可能是如下简单的事情: function a() { var a = 0; for(i=0; i<10000000; i++) { a++; }; }; 因为像这样的事情可能需要几毫秒,应该把它放在一个Node.js的承诺? 我是否正确地认为,如果我不这样做,那么会有阻塞,尽pipe只有几毫秒?

Nodejs监听来自http.get()的数据事件的响应stream

我正在学习Node.js 为此,我正在使用有用的nodeschool.io研讨会。 我正在阅读learnyounode研讨会。 在http客户端和HTTP收集部分我有一个问题。 尽pipe我已经阅读了他们和node.js上的API文档。 第一个挑战是, “将响应中每个”数据“事件的string内容写入控制台(stdout)中的新行。” 它在https收集部分说,“从服务器收集所有数据(不只是第一个”数据“事件)…”并引用第一个,因为它不收集所有数据。 不是 var allData = ""; response.setEncoding('utf8'); response.on('data', function(data){ allData = concat(allData, data); } 能够收集响应中的所有数据。 就目前为止我已经理解的asynchronous性质,下面的第一个callback将被称为asynchronoushttp.get()完成时。 或者我错了http.get()不是asynchronous的。 var http = require('http'); var urlString = process.argv[2]; http.get(urlString, function callback (response) { response.setEncoding('utf8'); response.on('data', console.log); response.on('error', console.error); }) 这段代码执行时会发生什么? callback是否等待http.get()完成并提供response ,所以http.get()是asynchronous的? 如果是这样,当事件被触发时, response.on(..)行正在侦听,创build后。 是不是在监听正在创buildresponse执行的连续过程,在这种情况下, callback不应该等待http.get()完成执行,以便事件侦听器可用于由response对象触发的事件? 一个解释可以是这样的; http.get()做什么来创build一个响应对象到服务器上写入并完成。 因此,它通过创build响应对象来完成它的工作,从现在开始,服务器可能会开始写入这个响应stream,并且callback已经开始,监听服务器写入任何位数据时触发“数据”事件的响应stream到它。 这在逻辑上是可能的。

在Node.js中用fs.readdir()列出文件时遇到麻烦

我正在通过“ 学习Node.js获得很多胜利! ”工作坊的方式工作,但我在练习5时遇到了麻烦。它要求您Create a program that prints a list of files in a given directory, filtered by the extension of the files. 我传入了包含各种JavaScript,Ruby和纯文本文件的目录,文件。 它应该是console.log()每个扩展名为.js文件。 var fs = require('fs'); function indexDirectory(directory) { fs.readdir(directory, function(err, files) { for (var i in files) { if (i.indexOf('.js') != -1) { console.log(files[i]); } } }); } indexDirectory('files'); 我当前的代码不会输出任何东西,当我运行node program.js 。 […]

节点:尝试重命名目录中的每个文件跳过一些

我试图通过一个目录(及其所有的子目录),并重命名(移动)每个图像,如果它是一个.jpg文件。 我认为我的代码是正确的。 我正在使用asynchronous重命名和递增计数器来增加文件名。 由于某些原因,在我的四个左右子文件夹的testing中,只有一半的图像被重命名。 我不知道这是为什么,因为我只是在callback文件(一旦图像已经成功重命名)和检查控制台列出rename被调用的每个文件时递增。 var fs = require('fs'); var filePrefix = 'new_Images'; var folderName = 'changed'; var counter = 0; function examine (path) { fs.readdir(path, function (err, files) { files.forEach(function (file) { var oldPath = path + file; fs.stat(oldPath, function (err, stats) { if (stats.isDirectory()) { examine(oldPath + '/'); } else { var suffix […]

async.times函数不会触发callback

我正在尝试使asynchronous正常工作。 在这个例子中,我想创build并保存一些mongoose对象,并在作业完成时获得callback。 即使对象保存在数据库中,callback也不会触发。 控制台日志也不显示。 谁能帮我找出我错过了什么? var number_of_objects = 5; async.times(number_of_objects, function(n, next){ var myObject = new Object({ random_string : Math.random().toString(36).substring(7), isActive: false }); myObject.save(n,function(err,object) { console.log("saved"); console.log(n); next(err,object); }); },function(err, objects) { console.log(objects); res.sendStatus(200); }); 提前谢谢了

从NodeJSasynchronous中返回值

我在Node中缺less一些简单的东西,我有一个需要导出的函数,并返回一个asynchronous值。 我不知道如何让Node在返回值之前“等待”,我显然被宠坏了前端的JavaScript和数据绑定… 下面的代码不会等待用户返回数据(推送者是一个rest呼叫),所以它总是不确定的。 exports.getMembers = function(channel) { var users; pusher.get( { path: '/channels/'+channel+'/users', params: {} }, function( error, request, response ) { if( response.statusCode === 200 ) { var result = JSON.parse( response.body ); users = result.users; return users; } else { console.log(error); } } ); //return users; };