Tag: asynchronous

JS节点asynchronous处理事件

有人可以指出我或者解释某种基于事件的devise模式来处理等待两个事件完成的行为。 我有一个模板,加载asynchronous和数据库调用,也是在同一时间发生。 我有一个只有在这两个任务都完成时才需要执行的响应。 我能想出的唯一解决scheme就是做一些丑陋的事情,比如在布尔事件中设置为true,然后检查它们是否全部为真。 有一个更好的方法吗?

在nodejs中asynchronous嵌套循环,下一个循环只有在完成后才能启动

检查下面的algorithm… users = getAllUsers(); for(i=0;i<users.length;i++) { contacts = getContactsOfUser(users[i].userId); contactslength = contacts.length; for(j=o;j<contactsLength;j++) { phones = getPhonesOfContacts(contacts[j].contactId); contacts[j].phones = phones; } users[i].contacts = contacts; } return users; 我想用node.js开发同样的逻辑。 我曾尝试使用foreach和concat和foreachseries函数的asynchronous 。 但都在第二级失败。 当指针正在获取一个用户的联系人时, i值增加,下一个用户的进程正在开始。 它并不等待为一个用户完成联系人和电话的完成过程。 只有在下一个用户开始之后。 我想实现这一点。 其实我想得到正确的用户对象 意味着所有的序列都被破坏了,谁能给我一个总体思路,我怎么能够实现这样的系列化过程。 我打开也改变我的algorithm。

TypeError:任务不是asynchronousjs平行的函数

我试图上传一个图像,并使用下面的代码更新数据库集合中的图像的url。 Controller.prototype.handle = function (req, res, next) { var id = req.params.id, controller = req.params.controller, optionalController; optionalController = _.clone(controller); // handle optional controller if (controller === 'newboat') { controller = 'boat'; } else if (controller === 'newcrew') { controller = 'crew'; } var files = req.files.files || {}, monthYear = new Date(), monthYear = [monthYear.getFullYear(), […]

Node.js:你如何处理循环中的callback?

我正在使用Node.js和Box SDK。 我的(失败!)代码如下所示: var connection = box.getConnection(req.user.login); connection.ready(function () { connection.getFolderItems(0, null, function (err, result) { if (err) { opts.body = err; } else { opts.body = result; var a = []; for (var i=0; i < result.entries.length; i++) { connection.getFileInfo(result.entries[i].id, function (err, fileInfo) { if (err) { opts.body = err; } else { a.push(fileInfo); […]

并行API请求的asynchronous模块错误

我是node.js中的一个begginer,现在我正试图获得一些API的结果。 我使用asynchronous模块( https://github.com/caolan/async )来并行请求,因此可以优化。 问题是代码返回一个错误,每次都指向不同的API调用不同的行(“callback(err,数据)”行) 这是错误的: if (called) throw new Error("Callback was already called."); ^ Error: Callback was already called. 我正在使用以下函数来请求API: function getData(s, apiURL, getURL, callback) { var ht; if (s == 1) { ht = https; } else { ht = http; } var options = { hostname : apiURL, path : getURL, method […]

如何在node.js中创build自定义asynchronous函数?

我不确定node.js是如何实现asynchronous的,哪些不是,以及如何创build自定义的ansyc函数。 说我想创build一个自定义的asynchronous。 如果仅仅是因为我把最后一个参数调用到了asynchronous函数callback函数或者cb函数中,它就会知道它是一个asynchronous函数,我会感到惊讶: function f(arg1, callback){ //do stuff with arg1 arg1.doStuff() //call callback callback(null, arg1.result()); } 我尝试了这样的事情,它不工作asynchronous。 你如何告诉node.js f实际上是asynchronous的?

asynchronous未定义 – 节点js

我试图得到nodejs的async工作,但我得到以下错误: ReferenceError:async没有在D:\ project \ routes \ index.js中定义:58:2在Layer.handle [作为handle_request](D:\ project \ node_modules \ express \ lib \ router \ layer.js:82:5 (D:\ project \ node_modules \ express \ lib \ router \ route.js:110:13)在Route.dispatch )在D:\ project \ node_modules \ express \ lib \ router \ index.js中的Layer.handle [作为handle_request](D:\ project \ node_modules \ express \ lib \ router \ layer.js:82:5):267 […]

NodeJs如何创build一个非阻塞计算

我试图让我的头在nodejs中创build一个无阻塞的重计算块。 拿这个例子(剥离其他东西): http.createServer(function(req, res) { console.log(req.url); sleep(10000); res.end('Hello World'); }).listen(8080, function() { console.log("ready"); }); 你可以想象,如果我同时打开2个浏览器窗口,第一个将等待10秒钟,另一个将按照预期等待20个。 所以,知道一个callback以某种方式asynchronous的武装,我删除了睡眠,并把这个: doHeavyStuff(function() { res.end('Hello World'); }); 与function简单定义: function doHeavyStuff(callback) { sleep(10000); callback(); } 这当然是行不通的…我也试图定义一个EventEmitter并注册它,但发射器的主要function有发射'完成'之前的睡眠,例如,所以一切都将运行阻止。 我在这里想知道其他人如何编写非阻塞代码…例如,mongojs模块或child_process.exec是非阻塞的,这意味着在代码中的某个地方,它们在另一个线程上分叉进程并听取其事件。 我怎样才能复制这个例如有一个漫长的过程呢? 我完全误解了nodejs范式吗? :/ 谢谢! 更新:解决scheme(有点) 感谢对Linus的回答,的确,唯一的办法是产生一个subprocess,比如另一个节点脚本: http.createServer(function(req, res) { console.log(req.url); var child = exec('node calculate.js', function (err, strout, strerr) { console.log("fatto"); res.end(strout); }); }).listen(8080, function() […]

Node.jsasynchronous函数*定义*

请,只是为了清除我脑海中的某些东西 我习惯于在库中使用asynchronous函数来编写,但是如何编写我自己的? 为了说明我的问题,我编写了一个名为“MadMathz”的模块, 我知道以下是asynchronous函数的示例用法: //load module var mM = require('./MadMathz'); //perform a function mM.async_function_addthree(12, function(result) { console.log(result) }); //do something straight afterwards console.log('Logging this straight after instead of waiting for computation'); 我知道该函数的第二个参数是callback,但是如何定义一个函数,如“async_function_addthree”? 我们假设为了这个例子的目的,async_function_addthree只是给第一个参数加3。 我只是把自己搞糊涂了,试图写出我认为可能的东西。 我完全在错误的轨道上? 我觉得我接近node.js,但这需要清理。 请解释,而不是在可能的情况下将其链接到某处。 我相信别人会从这个问题中受益。

如何等待所有节点stream完成/结束?

我有一个每24小时运行一次CRON的子节点进程。 当进程开始时,它会读取一些排队数据,并将该数据推送到某个转换stream。 这个stream然后作为一个逆多路复用器,并将stream分成多个stream,最终解决,但他们都是asynchronous的。 我需要终止所有这些stream完成后创build的subprocess。 我的问题是,你怎么知道什么时候所有的stream都完成了? 尝试: 我试图使用EventEmitter的“完成”事件,但似乎在第一个反向多路复用stream结束(这是一口:) :)时被捕获。 基于承诺的方法。 所以这种方法是有效的,但我认为有一个更简单的方法来做这样的事情。 基本上,这导致为每个反向复用stream水线创build一个承诺,当每个stream水线完成时,我们解决了这个承诺。 然后,当所有的承诺都已经解决了,一个事件被触发,我们在其他地方捕获这个事件来终止这个过程。