Articles of asynchronous

在整个摩卡testing之前运行asynchronous代码

我正在寻找一种方法来在整个摩卡testing之前运行asynchronous代码。 下面是一个testing的例子,它使用了一系列参数和期望值,并循环了这个数组中的所有项来产生函数断言。 var assert = require('assert') /* global describe, it*/ var fn = function (value) { return value + ' ' + 'pancake' } var tests = [ { 'arg': 'kitty', 'expect': 'kitty pancake' }, { 'arg': 'doggy', 'expect': 'doggy pancake' }, ] describe('example', function () { tests.forEach(function (test) { it('should return ' + test.expect, […]

Socket.io同步倒计时?

在我的服务器端脚本,我调用两个同时发射,看起来像这样。 if (songs.length > 0) { socket.emit('data loaded', songs); socket.broadcast.to(opponent).emit('data loaded', songs); } 一个是对手,另一个是对自己。 我的问题是什么时候加载数据在我的Android应用程序中,两个玩家都会出现倒计时。 对我来说,重要的是他们在屏幕上看到相同的号码,同时播放音乐。 我打开所有提示。

如何处理nodejs EMFILEexception而不修改ulimit?

我是Node.JS的新手,并且遇到EMFILE错误。 我追捕EMFILEexception,并在代码中处理它。 似乎有很多关于“错误:EMFILE,太多打开的文件”错误的问题,但大多数答案似乎是“增加你的ulimit”的行。 我的第一个问题是,我如何捕获这个exception? 当我用多个连接运行下面的代码时,会引发EMFILE错误: stream = net.createConnection(port, host); stream.addListener('connect', function() { return stream.write(request); }); stream.addListener('data', function(data) { return console.log(data); }); stream.addListener('end', function() { stream.end(); return callback(); }); stream.addListener('timeout', function() { stream.destroy(); console.log("timeout"); return callback(); }); stream.addListener('error', function(e) { console.log("this never gets called"); return }); “错误”侦听器中没有捕获exception。 我已经尝试用try{} catch (e) {}来包装上述内容,但没有任何反应。 我已经使用createConnection的callback方法,它不会返回任何错误。 我能够发现exception的唯一方法是: process.on('uncaughtException', function(err) { […]

快速error handling和asynchronous等待

在我的Node.js应用程序中,我添加了下面的代码来捕获每个未捕获的exception: process.on('uncaughtException', function (err: Error) { try { logger.err(err); } catch (err) { } }); 问题是Express有它自己的默认error handling程序,它捕获每个未捕获的exception。 现在,Express在Node(process.on)之前捕获了exception,所以我的logging器没有达到。 但是,可以添加另一个error handling程序,可以在执行Express之前捕获每个exception: app.use(logErrors); function logErrors (err: Error, req: Request, res: Response, next: NextFunction) { logger.err(err); next(err); } 这仍然不包括每一个案件。 每当我有一个async function ,我打电话await ,没有例外,但被拒绝的承诺退还。 例如: app.get('/foo', async function (req: Request, res: Response, next: NextFunction) { await bar(); }); function […]

根据rxjs中的时间处理一系列事件

我有一个过程,每隔一段时间发送一个数据包,我需要根据数据包到达的时间来pipe理这个数据stream,等等。 在某些时候,我也closuresstream和过程。 现在,我使用一组定时器来做这件事,但是我希望我可以用rxjs因为它看起来非常适合这种事情。 到目前为止,我还没有成功。 问题 stream应该定期发送数据包,但通常会偏离很多,有时会卡住。 在下列情况下,我想在某一时刻closuresstream: 如果需要比startDelay更多的时间发送第一个数据包。 在发送第一个数据包之后,如果两个数据包之间存在多于middleDelay的暂停。 经过一个恒定的时间段maxChannelTime 。 由于上述任何一种原因,当我即将closures这个stream时,我首先要求它有礼貌地closures,这样可以进行一些清理工作。 有时它也会在清理过程中给我发送一个最后的数据包。 但是我想等待cleanupTime的清理和最后的数据到达之前,我closures了stream,忽略任何更多的消息。 精 我将通过用Observable包装事件来创build“stream”。 我没有这样做的麻烦。 通过“closures”stream,我的意思是告诉stream程停止发送数据,并可能closures(即死亡)。

在async中执行forEach,像瀑布一样

我试图通过Node.js脚本从Google API的地址列表中检索经度和纬度。 电话本身工作正常,但由于我有大约100个地址提交。 我在数组上使用了async.forEach ,但是调用速度太快,而且出现错误“您已超出此API的速率限制”。 我发现每24小时呼叫次数限制在2500次,最多10次。 虽然我可以每天2500,但是我限制速度太快了。 我现在必须写一个function,这个function可以延迟电话的数量,使其达到极限。 这是我的代码示例: async.forEach(final_json, function(item, callback) { var path = '/maps/api/geocode/json?address='+encodeURIComponent(item.main_address)+'&sensor=false'; console.log(path); var options = { host: 'maps.googleapis.com', port: 80, path: path, method: 'GET', headers: { 'Content-Type': 'application/json' } } // a function I have who makes the http GET rest.getJSON(options, function(statusCode, res) { console.log(res); callback(); }); }, function() […]

如何打破承诺内的循环?

我正在做一个使用蓝鸟库的QA(问题/答案)应用程序。 所以这里的情况是: 用户用一些问题的答案填写表格(例如5个问题)。 一个问题有超过1个可能的答案:“问题有很多答案” 答案在数据库上使用node.bcryptencryption(bcrypt) 循环播放答案时,如果用户答案匹配,则不需要继续检查该问题的答案。 所以在做同步的时候,解决这个问题是一个普遍的问题,但是我有点失落,要做与承诺的asynchronous。 以下是我不知道如何进行的一个示例: .then(function(answers) { var compare = Promise.promisify(bcrypt.compare); // foreach answer, I need to check like this // compare(answer.password, user.password).then(function(match){ // if (match) break; <– something like this // }) })

Node.js中的asynchronous或步骤

我无法让我的asynchronous代码与node.js一起工作 尝试asynchronous和步骤库 – 代码只返回第一个函数(似乎没有通过rest)。 我究竟做错了什么? 谢谢! var step = require('step'); step( function f1(){ console.log('test1'); }, function f2(){ console.log('test2'); }, function finalize(err) { if (err) { console.log(err);return;} console.log('done with no problem'); } ); 或这个: var async = require('async'); async.series([ function f1(){ console.log('test1'); }, function f2(){ console.log('test2'); }, function finalize(err) { if (err) { console.log(err);return;} console.log('done with […]

node.js多个http请求

我是节点和js的新手,并尝试创build一个网站的快递,使三个Rest API调用之前呈现的页面。 目前我有下面,它返回一些JSON我转换成对象的列表。 其中一些属性只返回id值,我想运行三个API请求,返回这些Id的查找,以便我可以将这些数据作为有意义的值呈现给用户。 我可以通过运行下一个API调用来实现这一点,我正在渲染索引页,但是看起来非常混乱。 我看到的所有asynchronous教程都混淆了我的新手思维方式。 有人可以发布一个简单的例子,以反映下面的结构的asynchronous吗? var issues_json = ""; var request = http.request(options, function(response) { console.log("statusCode: ", res.statusCode); console.log("headers: ", res.headers); response.on("data", function(data) { issues_json += data; }); response.on("end", function() { console.log(issues_json); var column_obj = JSON.parse(issues_json); res.render('index', { title: 'List of Issues', response: issues_json, objects: column_obj }); }); response.on("error", function(e) { console.log(e.Message); res.render('index', […]

Q承诺中的并发限制 – 节点

有什么方法来限制使用Q promise库的promise的并发性吗? 这个问题有点相关我怎样才能限制Q promise的并发性? 但问题是,我试图做这样的事情: for (var i = 0; i <= 1000; i++) { return Q.all([ task1(i), task2(i) ]); // <– limit this to 2 at a time. } 真正的用例是: 从数据库提取post 在数据库中像posts.forEach(function(post) {} 对于每个职位做任务1,任务2,任务3(检索社交计数器,检索评论计数等) 在数据库中保存新的发布数据。 但问题是节点正在同时执行所有文章的所有任务,例如同时向Facebook发送500个post的“点数”。 如何限制Q.all()所以一次只有2个职位正在执行他们的任务? 或者还有其他可行的解决scheme可以应用 注:大多数任务(如果不是全部)依赖于请求库