Tag: asynchronous

Meteor / Node.js:for循环中的多个http请求,在一个定时间隔内均匀分布?

尊敬的JS开发人员 – 我试图在一个Meteor应用程序中按时间间隔进行一批服务器端http请求,并根据收到的响应更新MongoDB数据库。 每15秒钟一批请求应该开始,并且请求的集合应该在15秒内均匀分布(而不是一次性地泛滥API服务器)。 为了均匀地传播请求,我试图使用setTimeout方法。 有两个参数在每个http请求之间改变,这些不同的值存储在两个单独的数组中。 而不是拼出每个http请求(如果您计算两个数组之间的所有组合,20 * 4 = 80),我已经在for循环中编写了一个for循环来大大整合代码。 对于每个响应,如果返回OK,则两个switch语句通过评估它的i和y值来处理响应的处理方式。 问题:我似乎在“回拨地狱”。 当响应从服务器到达时, i和/或y的值有时已经被循环系统增加了,所以我不能100%确定地用switch语句处理响应。 updatedb()函数最终对错误响应执行特定的计算(将它们存储在数据库中的错误位置)。 希望有人可以提供一些指导,我可以做不同的事情来解决这个问题,因为我在智慧的结尾。 PS我试图用recursion的方法做到这一点,但得到了Maximum call stack size exceeded错误。 test = function test(){ // API base URL var baseURL = "https://example.com/"; // Array1 var array1 = ['item1', // i = 0 'item2', // i = 1 'item3', // i = 2 'item4', […]

如何纠结Node.JS的asynchronous

我正在努力解决如何克服和处理Node.JS的asynchronous性质。 我已经做了相当多的阅读,并试图通过使用消息传递解决scheme或callback函数使Node做我想要的。 我的问题是我有一个对象,我想要构造函数来加载文件和填充数组。 然后我希望所有对这个函数的调用都使用这个加载的数据。 所以我需要原始的调用等待文件加载和所有后续的调用使用已经加载的私有成员。 我的问题是,加载数据和获取数据的函数正在执行asynchronous,即使它返回一个带callback函数。 不pipe怎样,有没有简单的我失踪? 还是有一个更简单的模式,我可以在这里使用? 这个函数应该返回加载文件的一部分,但是返回undefined。 我已检查该文件实际上是正在加载,并正常工作。 function Song() { this.verses = undefined; this.loadVerses = function(verseNum, callback) { if (this.verses === undefined) { var fs = require('fs'), filename = 'README.md'; fs.readFile(filename, 'utf8', function(err, data) { if (err) { console.log('error throw opening file: %s, err: %s', filename, err); throw err; } else { […]

节点,快速,案例研究:“错误:发送后无法设置标题”

我的服务器崩溃,我在我的日志中发现以下错误: Error: Can't set headers after they are sent. 我无法重现错误。 我想我find了一个修复程序,但我想确保我理解下面代码中概述的问题。 基于这篇文章 ,我相信它来自我的Express路由器中的多个res.send(..)调用: router.post('/adduser', function(req, res) { var msg = '(message okay)' var db = req.db; db.collection('userlist').find({ username: req.body.username; }).toArray(function(err, items) { // verify the user, set session fields, etc… console.log("message after user verification is: "); console.log(msg); res.send({ msg: msg }); }); // Insert the […]

callback和asynchronous函数中的error handling

我试图提高我对Node.js的callback/error handling/asynchronous结构的了解,以解决nodechool.io上的挑战。 我有一个本地模块文件和一个实际的程序文件。 他们来了: my_module.js module.exports = function(path, extension, callback) { var fs = require('fs'); if (path) { fs.readdir(path, function(err, list) { if (err) return callback(err); var filtered = list.filter(function(item) { //console.log(item.split(".")); if (item.split(".")[1] == extension) return item }) callback(null, filtered); }) } else { callback("===> Please provide a directory path.") } } program.js var […]

Node.js:如何以编程方式确定asynchronous?

我希望能够采取一个不callback的函数,并确定它是否将asynchronous执行。 特别是,我正在使用mraa在Intel Edison上使用Node.js ,它具有本机C ++实现的function,如不接受callback的i2c.readReg(address) 。 我如何确定一个函数是否阻塞了其他系统进程的处理器? 我怎样才能确定其他JS可以在这个过渡期间运行? 还是我没有接近这个正确的方式?

Node.js,在继续执行之前等待所有的Redis查询完成

我需要通过一系列值,在Redis中查找date(看是否存在),然后继续。 例如: var to_check = [ 1, 2, 3 ] var found_elements = [] for (var i = 0; i < to_check.length; i++) { redis.EXISTS('namespace:' + to_check.length[i], function(err, value) { if (!err && value) { found_elements.push(to_check.length[i]) } }) } console.log(found_elements.join(', ')) 在所有发送给Redis的callback都被执行之后,我需要执行最后一行。 什么是最好的方法来解决这个问题?

Node.js / Sails.js – forEach循环中的函数

我试图得到以下简化的代码完成,然后同步: factors.forEach(function(factor, index){ Factor.findOrCreate({function_name: factor}).exec(function(){ sails.log('success'); }) }); 我该怎么做? 到目前为止我已经尝试过: 将第2-4行放在一个单独的函数中,并从循环中调用它 使用async.js async.series()调用 但是,虽然它会执行调用(打印“成功”),但它会很less在数据库中find或创build一个因子,所以它与代码的asynchronous特性有关。 使用promise等待所有findOrCreate()调用返回,然后继续 var promises = []; factors.forEach(function(factor, index){ promises.push(Factor.findOrCreate({function_name: factor})); }); Q.all(promises).then(function(){ sails.log('success'); }); 我已经尝试了这个版本的几个版本,但我仍然无法打印“成功” – 这似乎是正确的方式来做到这一点,但我不太清楚什么是错的。 问橡皮鸭

nodejs / async:如何让我的代码容易理解

使用loopbackjs 。 Somwhere在我的代码中,我需要以非常自定义的方式validation属性,所以我不能使用可用的validation器。 因此,我正在考虑像这样使用它: var somevar = "someval"; var anothervar = "anothervar"; MyModel.createme = function(prop1, prop2, prop3, prop4, callback) { async.parallel([ verify_prop1, verify_prop2, verify_prop3, verify_prop4 ], function(err, results) { }); } 那么我打算为async创build函数: //local methods var verify_prop1 = function(callback) { }; 这是我意识到我被卡住的地方。 如果我在async.parallel调用中内联编写函数,我可以访问函数参数prop1等,但是如何将它们join到我的verify_propX函数中? asynchronouspararell的函数签名是固定的吗? 我过分复杂的东西? 在另一个文件中,我在asynchronous中使用了三个并行函数,它们相当大,所以看上去不太好,编辑也变得昂贵。 所以我想要一个干净的asynchronous方法分离…我怎么能做到这一点?

为什么这个JavaScript Promise拒绝()在结果callback处理?

这里有更多代码的一个子集。 JavaScript中的Node.js 实质上,相当于函数调用了一些unit testing(在函数b )。 从b返回时,调用exceptiontesting(在函数c )。 c调用同步exceptiontesting(在函数d )。 后来, c将调用另一个函数(比如说)进行asynchronousexceptiontesting(Promise reject()的使用)。 在Node.js中使用Promise似乎是最好的,但即使使用它们也并不总是导致我预测的行为。 'use strict'; function d() { return new Promise(function(resolve, reject) { console.log('start d throw test'); try { throw new Error('Error type'); } catch (e) { console.log('d catch block e.message=' + e.message + ' rejecting to c'); return reject(new Error('d ' + e.message)); } […]

async.parallel用于多个数据

这是一个async.parallel方法来显示商店信息及其相应的图像: function listshops(callback) { async.parallel([ myFirstFunction, mySecondFunction, ], function (err,results) { console.log(results); }); function myFirstFunction(callback) { client.connection.query('select * from shop',function(err,data1){ callback(null,data1); }); } function mySecondFunction(callback) { client.connection.query('select * from image',function(err,data2){ callback(null,data2); }); } 1)我的餐桌=>店铺和图片: http : //i.stack.imgur.com/F20MU.png 2)输出得到我的code.But这不是我期望的输出: http ://i.stack.imgur.com/ltJpf.png 3)预期产出: http : //i.stack.imgur.com/xAmvu.png