Tag: asynchronous

Node.js – asynchronous虽然循环不迭代

根据以前的问题非法break语句(Node.js)的build议 ,我实现了async.whilst() ,但是它不会迭代多次。 我试图find一个唯一的ID,在一个ID的末尾增加一个数字,然后查询Mongo来查看该ID是否存在。 如果不存在,则find唯一的ID。 它只循环一次,而不是直到find一个唯一的。 哪里不对? 代码: var uniqueNumber = 1; var newUnique; async.whilst( function () { var uniqueNum_string = uniqueNumber.toString(); newUnique = data.id + uniqueNum_string; db.collection('landmarks').findOne({'id':newUnique}, function(err, data){ if (data){ console.log('entry found!'); return; } else { console.log('entry not found!'); } }); }, function (callback) { uniqueNumber++; }, function (err) { saveLandmark(newUnique); } );

在asynchronous调用节点后做些事情

假设我有四个不同的asynchronous操作需要运行,并且它们都可以独立运行。 但是还有一个剩余的函数需要使用这些asynchronous调用收集的所有数据,所以只能在所有这些完成后才能完成。 一个简单的方法是使asynchronous调用相互调用,然后调用最终函数,如下所示: myObj.async1(function () { myObj.async2(function () { myObj.async3(function () { myObj.async4(function () { … finalFunction(); 但是这样做是一个糟糕的方法,因为节点是围绕asynchronousfunction构build的。 相反,我们假设我们想要这样做: myObj.async1(async1Callback); myObj.async2(async2Callback); myObj.async3(async3Callback); myObj.async4(async4Callback); if( //Some logic here to determine when all four functions have completed finalFunction(); 什么是确定这个逻辑的最好方法? 我认为每个函数都设置了一个布尔variables来表示它是否已经完成,然后有一个基于时间的发射器,它不断地检查所有四个variables是否设置为true,然后调用finalFunction,但是如果有的话可能会变得混乱所有这些变数都在附近。 任何想法是什么是最好的办法做到这一点?

如何处理需要两个asynchronous方法的node / express的请求

我正在学习节点。 我有一个web应用程序,通过比特币包与bitcoind连接,通过knex与PostgreSQL 连接 。 我需要从每个模块获取一些数据,然后将其全部传递给我的视图进行渲染。 我的代码看起来像这样到目前为止: exports.index = function(req, res){ var testnet=''; bitcoin.getInfo(function(e, info){ if(e){ return console.log(e);} if(info.testnet){ testnet='bitcoin RPC is testnet'; }else{ testnet='nope.. you must be crazy'; } var c=knex('config').select().then(function(k){ res.render('index', { title: k[0].site_name, testnet: testnet }); }); }); }; 这样做的结构方式,首先等待比特币回复,然后将请求发送到PostgreSQL,然后等待一段时间回复。 这两个等待期可能会同时发生。 但是,我不知道如何做与承诺/callback在Javascript中。 我怎样才能pipe理这种asynchronous发生,而不是连续发生?

闭包&asynchronousnode.jsfunction

所有, 尝试让我的头在一个node.js上下文(asynchronous调用)closures。 我有以下代码: timer = setInterval(pollOID, 1000); function pollOID() { for (channel in channels) { session.get({ oid: channels[channel].oid }, function (varbinds) { console.log("The " + channels[channel].name + " is " + varbinds); }); } } 该代码每秒轮询一次路由器的SNMP数据,使用setIntervalcallback中的循环来查询路由器的几个SNMP实体。 session.get函数有一个asynchronouscallback来处理来自路由器的结果。 SNMP位工作正常,我的问题是关于如何在会话asynchronouscallback内持续循环variables通道的值。 我得到以下结果: The Download Attenuation is 7.5 The Download Attenuation is 361600 The Download Attenuation is 60 因此,循环variables通道正在改变每个调用session.get,因为函数从路由器返回正确的值。 […]

迭代每个元素的数组运行asynchronous任务

我有一个项目的列表,我想在每个项目上运行一个asynchronous任务。 我想同步,所以每个元素将被处理,一旦前面的元素已经完成。 我到目前为止所尝试的是: function processItems(items) { var i = 0; while(i < items.length) { asyncFunc(items[i], function() { i++ }); // asyncFunc takes a callback parameter } } 然而这个循环永远(我相信i在callback函数中超出了范围)。 有没有更好的方法来实现这一目标?

TypeError:对象不是具有async.waterfall的函数

我是一个node.js noob尝试使用async.waterfall 。 我有问题从瀑布数组的最后一个任务到最后的callback方法。 在下面的例子中,我将callback传递给doSomethingAsync ,但是当我想在doSomethingAsync执行callback时,我得到TypeError: object is not a function 。 我不明白。 谢谢你的想法 编辑 : 瀑布的首要任务是创build一个Mongo文档。 save()函数的callback是function(err){…} 。 var session = createSession(); // session is a Mongoose model async.waterfall([ function (callback) { … session.save(callback); // Model.save(function(err){…} }, function (callback) { doSomethingAsync(session, callback) } ], function (err, session) { }); function doSomethingAsync(session, callback){ doSomething(function(err){ callback(err,session); […]

使用forEach时,与node.jsasynchronousstream程混淆。

我在node.js中编写了6个月。 我已经阅读了有关asynchronous编码,事件循环和callback等概念。 我知道“在同步代码栈执行时,asynchronous代码永远不会执行,这就是node.js是单线程的意思。 但是这只是一个例子 var a = [4, 5, 6, 7]; var results = []; a.forEach(function(result){ results.push(result + 1); }); console.log(results); 据我所知,函数forEach的参数是在同步块完成执行后调用的callback函数。 这意味着我期望的结果将是 [] 但它是事实 [5, 6 ,7, 8] 为什么发生这种情况? 是为了每个同步? 或者我错过了什么? 根据我的理解, console.log(results) 将数据压入之前执行。

如何从javascriptasynchronous函数访问返回值

我有一个Node.js函数从数据库表中获取一些值 var GetPoints = function(ibmdb, dbConnection, msisdn) { ibmdb.open(dbConnection, function(err, conn) { if (err) { //Error } else { conn.query('SELECT id,msisdn,points FROM t_points WHERE msisdn =' + msisdn, function(err, data) { console.log(err); if (!err) { conn.close(function(err) { if (!err) {} }); consele.log(data); //return data[0].POINTS; } else { //Error } }); } console.log("points" + points); }); […]

Nodejs没有执行asynchronous的promise函数

我写了一个小例子js来学习如何使用Promises。 我预计脚本开始,并立即输出“开始”和几秒钟后“45”。 但是,无论如何,脚本开始时没有任何输出,在退出之前,两行都被打印出来。 我误解了承诺如何工作或有缓冲的问题? ;(function(main, undefined) { "use strict"; main.test = function() { return new Promise(function(resolve, reject) { for(var i = 0; i < 999999999; ++i); resolve(45); }); }; })(global); global.test().then(function(r) { console.log(r); }); console.log("start"); $ node -v v0.12.6

有关nodejs线程的一些混淆

我有一些关于nodejs线程的混淆。 据我所知, nodejs运行在一个单一的线程。 如果有一个asynchronous函数被调用, nodejs将创build一个新的线程来运行这些asynchronous代码。 asynchronous代码完成后。 event loop将获得asynchronous结果,并在另一个新线程中触发callback函数。 为了testing,我进行了下面的代码testing: var fs = require("fs"); fs.readFile('package.json','utf-8', function (err, data) { if(err) console.log(err) else console.log(data); }); console.log("before loop"); while(true); console.log("after loop"); 我的预期结果是: 循环之前 – – package.json内容 – – 其实得到: 循环之前 我可能在一些地方是错的。 问题 : 为什么while(true)阻塞了readFile()或阻止了它的callback函数? 这些线程之间有什么关系?