Articles of asynchronous

Q与node.js等待的asynchronous库

我真的很困扰nodejs中的Q模块。 这是我的代码如下。 它在runnable.com上工作正常,但是当我把它放在我的一个控制器方法(就像这样),它只是不停地等待,我可以告诉它调用第一个方法。 但它只是在等待。 我究竟做错了什么。 我已经花了2天这个现在:( var Q = require('q'); function Apple (type) { this.type = type; this.color = "red"; this.getInfo = function() { console.log(this.color); return; }; } var apple = new Apple('macintosh'); apple.color = "reddish"; var stat = Q.ninvoke(apple, 'getInfo').then(function() { console.log(err) }); 更新: 将Q.ninvoke更改为Q.invoke并使用Q的v2.0,则不再可用。 我得到的错误调用是未定义的。 改为使用Q的v1.0,现在下面的工作就好了。 var Q = require('q'); function Apple(type) { […]

我是否需要像Java一样同步node.js代码?

我最近才开始为node.js开发,所以如果这是一个愚蠢的问题 – 我来自Javaland,对象仍然顺畅地生活顺序和同步,请原谅我。 ;) 我有一个密钥生成器对象,它使用高低algorithm的变体为数据库插入发布密钥。 这是我的代码: function KeyGenerator() { var nextKey; var upperBound; this.generateKey = function(table, done) { if (nextKey > upperBound) { require("../sync/key-series-request").requestKeys(function(err,nextKey,upperBound) { if (err) { return done(err); } this.nextKey = nextKey; this.upperBound = upperBound; done(nextKey++); }); } else { done(nextKey++); } } } 显然,当我问一个钥匙的时候,我必须确保它永远不会发出两次同样的钥匙。 在Java中,如果我想启用并发访问,我会使这个synchronized 。 在node.js中,有没有类似的概念,还是没有必要? 我打算问使用async.parallel的批量插入一堆键的发电机。 我的期望是,因为节点是单线程的,我不必担心同一个密钥不止一次发出,有人可以确认这是正确的吗? 获得一个新的系列涉及asynchronous数据库操作,所以如果我做了20个同时的密钥请求,但该系列只剩下两个密钥,我不会最终得到18个新系列的请求吗? 我能做些什么来避免这种情况? 更新这是requestKeys的代码: […]

当它已经被asynchronous地从别的地方改变时,防止改变数组?

在我的多用户live nods.js应用程序中,我有一个从数组中删除特定元素的函数。 这是一个asyn函数,可能被两个不同的用户独立调用,可能同时(客户端套接字触发器)在相同的数组上执行操作。 myUsers= []; myUsers.push('user1'); myUsers.push('user2'); myUsers.push('user3'); function removeUser(user){ for(var i=0; i<=myUsers.length; i++){ if(user===myUsers[i]){ myUsers.splice(i,1); break; } } } 我是否应该担心这可能会导致两个操作同时发生,从而消除错误的/无意识的元素? 类似地,当同时调用removeUser('user1')和removeUser('user3') (客户端套接字触发器)时,当user1正在拼接,并且user3已经到达i=2它可能会删除user2而不是user3 ? i甚至可能现在超过循环的原始限制(myUsers.length)? 我的担心是否有效? 如果是这样,那么解决scheme是什么?

Nodejs MongoDB用asynchronous函数更新文档

我是NodeJS和MongoDB的新手。 有没有办法使用nodejs中的asynchronous函数来更新文档? 我有一个网站的文件集合:_id,名称和注册人。 我想使用asynchronous函数在注册器中插入一个值。 该函数是一个系统调用,我只是parsing我想要的输出。 运行代码,asynchronous函数logging我想要但不存储在数据库中的信息。 关于如何解决这个问题的任何build议? 谢谢。 /* * { _id: 53448014b15c693931000002, * name: 'google.com', * registrant: 'defaultval' } */ var MongoClient = require('mongodb').MongoClient; var ObjectID = require('mongodb').ObjectID; var id = '53448014b15c693931000002'; var domain = 'google.com'; MongoClient.connect('mongodb://127.0.0.1:27017/mydb', function(err, db) { if (err) throw err; var collection = db.collection('websites'); collection.findAndModify({_id:new ObjectID(id)}, {}, {$set: {registrant: test(domain, […]

async.auto中的竞争条件

我正在使用async.each如下所示: async.each(students, plan(student, callback), function(err) { ….. ….. }); plan(student, callback){ …… …… commonDS[student.id] = student.name; } 这里commonDS是函数调用的通用数据结构,所以在这里有竞争条件吗?

Async.foreach迭代强制停止,直到第一次迭代执行

async.forEach(vsr.vehicles, function(vsr_vehicle, callback){ pjCustom.vehicleJson(vsr_vehicle, function(vehicleInitialize){ Vehicle.find({ where: { vehicleID: (vsr_vehicle.vehicleID).toString().trim() } }).success(function(vehicleFound){ if(vehicleFound){ //Code Logic is working fine. }else{ vehicleBuild.save().success(function(vehicleNew){ // To create new vehicle of updated vsr var vehicleBuild = Vehicle.build(vehicleInitialize) pj.log("Update vehicle ……………………….") temp.push(vehicleNew.vehicleID) }) } }) }) callback() },function(){ res.send(204) }) //vehicleJSON exports.vehicleJson = function(vsr_vehicle, callback){ pjCustom.getVehicle(vsr_vehicle, function(status, vehicleId){ if (status == […]

在if语句中使用child_process.exec的返回值?

我有这个function: function checkfType(a,b){ exec("file '"+a+"'",function(err,stdout,stderr){ if(stdout.containsString(b)===true){return true}else{return false} }) } 但是,如果我在if语句中使用if(checkfType(".","directory"){} ,它只是变成“false”。我将exec函数作为非函数进行testing,并使用它来代替if语句: exec("file '.'",function(err,stdout,stderr){ if(stdout.containsString("directory")===true){ console.log("It works!); }else{ console.log("It doesn't work.";} }); 这工作得很好。 我被引导认为exec函数是asynchronous的(或类似的),这是我的问题所在。 有没有办法在if语句中使用exec的输出?

为什么async.filter()不接受错误?

async.filter()的文档说,迭代器callback不接受一个错误,显然“符合节点库的工作方式与像fs.exists真相testing”。 我完全不理解这个解释。 为什么不能接受错误? 如果我的asynchronous真相testing涉及到某些可能导致错误的事情,有时呢? 例如:我有一个可能是文件或目录混合的path名称数组。 我想过滤掉目录,所以我使用async.filter和一个调用fs.stat的迭代器,然后调用done(stat.isFile()); 。 但是,如果我的fs.stat遇到ENOENT错误的path之一呢? 我该怎么处理这个错误?

如何在范围循环上应用asynchronous?

据我所知, async只在数组上工作。 我的应用程序正在读取一个1.2GB的文件,我想在1024KB的部分读取它。 由于RAM问题,我想每次读取10个部分。 从文档中 , eachlimit(arr, 10, iterator, callback)对我来说都是正确的function。 问题是我不能把所有的部分放在数组中。 这是因为如果我能做到这一点,Ram的问题就会boost,而每个eachSeries都是多余的。 换一种说法。 我想切换下面的循环: for (var rangeStart = 0; rangeStart < stats.size; rangeStart = rangeStart + partSize) { //Where stats.size = 1200000000; partsize = 1024000, put the part of the file in the range into a buffer } 同步版本,以便我每次完成10个循环,然后继续。

Node.JS中的ASYNC

我对Node.JS和callback中的asynchronous是新鲜的。 你能不能让我知道这是否是一个asynchronous调用的正确方法? function myFunc(schema) { async.each(Object.keys(schema), function(variable) { for (item in schema[variable]) { for (field in schema[variable][item]) { // Some operations go here } createDB(item, schema[variable][item]); } }); } function CreateDB(name, new_items) { ddb.createTable(selected_field.name, {hash: ['id', ddb.schemaTypes().number], range: ['time', ddb.schemaTypes().string], AttributeDefinitions: new_items }, {read: 1, write: 1}, function(err, details) { console.log("The DB is now created!"); […]