Articles of asynchronous

用fs读取文件后parsingJson

我试图build立两个node.js脚本之间的通信。 第一个获取请求并将响应写入文件。 第二个观察文件,然后他读取它,并提示结果。 第一个(然后写) var request = require('request'); var parseString = require('xml2js').parseString; var fs = require('fs'); //Some needed variables streamInterval = setInterval(function() { request.get(addr, function (error, response, body) { if (!error && response.statusCode == 200) { parseString(body,{ explicitArray : false, ignoreAttrs : true }, function (err, result) { var jsonResult = JSON.stringify(result); var result = […]

MongoDb forEachasynchronouscallback

我正在使用Request npm模块从api提取数据并将其插入到Mongo数据库中的字段中。 阿富汗是数据库中的第一个国家,是唯一充满数据的文件。 其他国家都会被跳过。 下面的代码控制台顺序logging“开始”和“结束”,然后logging国家名称。 我得到这是JavaScript的asynchronous性质的结果,但我不知道它是如何影响此代码。 不应该在控制台日志: begin country end etc… 这里代码: MongoClient.connect(url, function(err, db) { db.collection('countries').find().forEach( function(myDoc) { console.log('beginning'); var code = myDoc.country.iso2; var options = { url: 'https://api.tugroup.com/v1/travelsafe/countries/' + code, headers: { ['X-Auth-API-Key']: '*******', ['Content-Type']: 'application/x-www-form-urlencoded' } } var callback = function(error, response, body) { console.log(myDoc.country.name); if (!error && response.statusCode == 200) { […]

JS(node.js) – 如果我进行asynchronous调用,但不等待它完成将保证完成执行?

标题是一个长期的问题,但如果我在JavaScript中进行asynchronous调用,但没有回电或在承诺链它会完成执行? 即如果我有像这样的代码: function markAsInactive(userId) { return retrieveUser(userId) // .then(res => { const mark = markAsInactive(userId) // returns a promise (say takes 2 seconds) return Promise.resolve('blah') }) .then(…etc) .catch(…) } 对markAsInactive的调用被触发,但是线程不会等待它parsing,而是立即转向下一个(就我的理解而言)。 如果堆栈返回到根目录,将保证完成执行,否则线程/进程将取消调用? 我知道我可以使用类似return Promise.all([mark, …])来并行地parsing多个promise。 这个问题更多的是为了我的熏陶。

使用asynchronousdb编程来sorting动作

新的asynchronous和挣扎。 在下面的例子中,我希望初始化一个表,然后通过以下方式处理它的内容:a)删除旧数据b)插入新loggingc)将表读入数组d)显示数组 'use strict'; // ================================================================================ // Module dependencies var pgp = require('pg-promise')(); // ================================================================================ //Configure the database connection var config = { user: 'user', //env var: PGUSER database: 'database', //env var: PGDATABASE password: 'password', //env var: PGPASSWORD }; var db = pgp(config); // ================================================================================ // Initialise rhe variables var customers = []; // ================================================================================ […]

Nodejs:Waterline + Caolan / Async:绑定函数

使用Balderdashy /水线和Caolan /asynchronous ,我试图平行severa水线查询。 到目前为止,我发现的更短的是: const tasks = { foos: (function(){return this.exec.bind(this);}).apply(Foo.find({foo: "foo"})), bars: (function(){return this.exec.bind(this);}).apply(Bar.find({bar: "bar"})) }; return async.parallel(tasks, function(err, out){ // Here, err contains the potential error, and out looks like {foos:[…],bars:[…]} }); 我试图做bars: Bar.find({bar: "bar"}).exec但async似乎apply该函数与另一个对象作为范围…所以我不能find一种方法来做到这一点更简单的方法。 请注意,我想避免将函数封装在另一个函数中,因为它是我想要查找替代方法的语法: bars: function(cb){Bar.find({bar: "bar"}).exec(cb)} 感谢您的帮助。

在后端或前端列出一个集合

我对NodeJS很新,我需要一些build议。 我有一个显示用户列表的页面,我使用Mongoose从集合中检索这个列表。 我知道显示这个列表的两种方法: 1)在加载页面之前在后端进行查询,然后将结果发送到视图: // app.js var users = Users.find({}, function(err, results){ res.render('list', { users: results}); }); 2)在页面加载之后,以asynchronous方式在前端进行查询。 例如,使用Angular // users.js var User = $resource('/getUsers'); User.query(function (results){ $scope.users = results; }); // users.html <ul> <li ng-repeat="user in users"{{ user.name }}></li> </ul> // app.js app.get('getUsers', function(req, res){ Users.find({}, function(req, results){ res.json(results); }) }); 我希望一切都清楚。 在最佳实践和/或性能方面,最好的做法是什么? 谢谢

asynchronous并行和承诺不会工作

我有以下两个片段: 这是我想要运行的单位: health.checkHealth = function (req, res) { async.parallel({ cassandra: function (callback) { cassandraRepository.ping(callback); }, kafka: function (callback) { kafkaHelper.ping(callback); }, vault: function (callback) { vaultClient.health() .then((isOk)=>{ callback(null, isOk)}) .catch(()=> callback(null, false)); } }, function (err, result) { var response = {}; if (result.cassandra) { response.cassandra = "OK"; } else { response.cassandra = "Failed"; res.status(500); […]

NodeJS – 如何asynchronous读取多个文件并将读取内容写入一个文件

我想在NodeJS中asynchronous读取多个文件。 阅读顺序无关紧要时,同时阅读多个文件是很好的select。 但是,我试图将这些文件的内容一起写入一个文件。 我可以写一个文件很好,但我怎样才能确保所有的文件已经被读取之前,我把所有的内容写入一个文件?

节点js中的嵌套asynchronousmongoDB调用

我有一个相当简单的问题,但我找不到一个优雅的解决scheme来解决这个问题。 在下面的代码中,我有两个对mongo数据库的嵌套调用。 我使用Monk来pipe理我的电话。 问题是:嵌套插入之前可能会发生for循环(1)循环。 所以下一个find(2)指令没有find最后一个插入的动作。 呼叫顺序是1-2-2-2-3-3-3(对于大小为3的动作列表)。 所以我所有的数据都被插入。 我的目标是有呼叫订单1-2-3-2-3-2-3 你有没有任何线索如何pipe理这样的问题,而不是在我的数据库发现一个大的和pipe理我的列表服务器端? (获取所有的数据,使自己的search,这是非常可怕的做,插入我想要的元素,然后把它推到数据库…) for (var action of actionList)//(1) { collectionActions.find(//(2) {eventid : action.eventid}, function(e,actionsFound) { if (actionsFound.length == 0) { collectionActions.insert(action, function(err, result)//(3) { console.log("insert action : " + action._id); }) } } ) }

为什么我的async.waterfall JavaScript的顺序代码没有结束?

当我运行下面的代码,顺序连接到MongoDB,然后closures,在javascript中使用async.waterfall程序不会按预期结束。 相反,它似乎只是在“数据库closures”行之后等待。 $ node test-async2.js hit connectMongo Connected correctly to server, DB: notes hit closeMongo DB closed [program just waits here, doesn't end] 我曾期待该计划结束。 我犯了什么错误? const async = require('async'), MongoClient = require('mongodb').MongoClient, url = 'mongodb://localhost:27017/notes'; function connectMongo(next) { console.log('hit connectMongo'); MongoClient.connect(url, function(err, db) { console.log("Connected to server, DB: " + db.databaseName); next(null, db); }); } […]