Tag: asynchronous

包装process.nextTick导致超出最大调用堆栈大小

我想包装process.nextTick函数,但导致recursion。 var actual = process.nextTick; process.nextTick = function(callback) { console.log('next tick called'); actual.apply(this, arguments); } console.log('starts'); setTimeout(function(){ console.log('set timeout called'); }, 100); 这个代码产生 starts next tick called next tick called … RangeError: Maximum call stack size exceeded 谁能解释工作stream程?

等待mongo写入,然后再从find中返回

我想要一个store js对象来pipe理一个mongodb集合并且performance得如此: store.insert(thing); // called from a pubsub system that don't wait the insert to finish store.get(); // returns a promise that resolves to the things in the collection // even if called immediately after insert it must contain the last thing inserted 我像这样手动实现它: let inserts = 0; let afterInserts = []; const checkInsertsFinished = […]

Node.js:你什么时候知道asynchronous任务的集合是什么时候完成的?

我想下载一个目录,并检查我看到的每个文件的名称与正则expression式。 基本上,一个常见的unix find命令的版本,只能写在Node.js中。 我不在乎这些文件的顺序,但是我确实要确保所有的文件都可以得到。 我有以下的代码,这是接近(我认为)我想要的。 它需要一个startdir,一个正则expression式和一个callback; 对于它分析的每个文件,它将sentinel的值递增1,当分析完成时,递减哨兵。 我担心的是,如果只有一个文件和一个深度嵌套的目录集合,它将分析该文件并在find第二个文件之前很长时间触发callback,并且可能会调用两次callback。 显然,我可以通过让一个firedvariables来限制它的第二次触发来阻止这个callback被两次调用。 但是,这仍然会给我错误的数据。 我在这里做错了什么,是否有一个更适合节点的方式来做到这一点? fs = require('fs') path = require('path') function get_all_files(startdir, regexp, callback) { var sentinel = 0; var results = []; function check_sentinel() { sentinel–; if (sentinel === 0) { callback(results); } } function check_file(dir, filename) { var fname; sentinel++; if (regexp.test(filename)) { results.push(path.join(dir, filename)); } […]

node.js request.js并不是触发请求

(我也发布了这个问题的请求的github页面上的链接 ) 我有一个应用程序使用请求从内部API获取API数据。 我正在做一些testing,看起来我们的应用程序在负载较重的情况下性能不佳,而且API响应速度越来越慢。 我根据我们所使用的请求调用推导出这个结果,看起来好像请求可能是将这些请求放在一个队列中,而不是一次全部放入。 这是一个testing脚本,显示了这个行为: #!/usr/bin/env node var request = require("request"), logger = require("./logger.js"), argv = require("optimist").argv; var numRequests = argv.requests || argv.r, requestsMade = 0, wait = argv.wait || argv.w || 0, url = argv.url || argv.u || "http://www.google.com", requestApi = function(url,callback){ var requestTime = new Date().getTime(); request({ method: "GET", uri: url },function(err, […]

node-mysql无法处理多个查询?

我正在使用:node-mysql arrtickers大约有200个值。 arrtickersclosures将值传入sym。 sym将传递给每个函数的值(以asynchronous模式运行,每个函数将自己开始运行而不必等待前面的fn完成) 这里的问题是mysql似乎无法处理多个调用? events.js:48 throw arguments[1]; // Unhandled 'error' event ^ Error: reconnection attempt failed before connection was fully set up at Socket.<anonymous> (/home/ubuntu/node/node_modules/mysql/lib/client.js:67:28) at Socket.emit (events.js:64:17) at TCP.onread (net.js:398:51) arrtickers.forEach(function(value) { var sym= value; (function(sym) { url2= "http://test2.com/quote.ashx?t="+sym+"&ty=c&ta=1&p=d&b=1"; request({ uri:url2 }, function (error, response, body) { jsdom.env({ html: body, scripts: [ jqlib […]

如何用process.nextTick进行testing

我正在使用摩卡来testing一些Node.js代码,并希望使用process.nextTick()来调用方法的callback。 代码 @getNouns: (callback) -> @_wordnik.randomWords( includePartOfSpeech: 'noun', (e, result) -> throw new Error('Wordnik Failed') if e process.nextTick -> callback(result) ) 考试 it 'should call a callback with the response', (done) -> sinon.stub(Word._wordnik, 'randomWords').yields(null, [ {id: 1234, word: "hello"}, {id: 2345, word: "foo"}, {id: 3456, word: "goodbye"} ] ) spy = sinon.spy() Word.getNouns (result) -> […]

节点:async.foreach失败时,错误未捕获exception被抛出

我在async.forEach构造中包装了一些asynchronous执行的“子”函数(来自伟大的lib: https : //github.com/caolan/async ) 当这些子函数之一发生未捕获的exception时,整个节点进程就会挂起。 (因为callback永远不会返回到async.forEach构造,async.forEach仍然认为子function很忙) 不过,我会认为,至less抛出的exception会起泡,因为我没有抓到任何地方。 有没有办法configurationasync.forEach如何处理这些exception? 这是非常困难的编程。

如何将asynchronous调用转换为JavaScript中的同步?

我在客户端使用JavaScript和服务器端的node.js,实际上我试图做一个远程validationinput字段,结果必须是布尔值,它应该基于服务器调用,我的代码如下, jQuery.validator.addMethod("remoteValidation", function(value, element) { var accountName = $("#accountName").val(); var accountType = $("#accountType").val(); var valid = this.Validation(accountType,accountName); //returning undefined becoz return statement executing before server side execution return valid; }, "Entered email or username already exists"); this.validation = function(accountType,accountName,cb){ var valid =null; ss.rpc('AccountsManagement.userNameChecker',accountType,accountName,function(res) { // res will return boolean valid = res; }); //valid is […]

asynchronous问题与Node.js迭代

我发现自己碰到了遍历数组的问题,触发了每个项目的asynchronous操作,这些操作调用了我正在重复迭代的数组的callback函数。当然,在进入下一个项目之前,您需要等待之前的完。 如果在处理项目时发生错误,则必须停止并退出所有封闭循环。 我写的处理这些情况的代码很容易编写,但不容易读取/维护。 为了完整的这个问题,我正在使用我写的这样的方法: iterate(items, item_callback, ended_callback); item_callback看起来像这样: function(item, next_item, stop) { //do your stuff with `item` here… //return next_item() to go forward //return stop() to break } 我想知道,也许我错过了一个更好的node.js迭代技术。 示例时间: User.find(function(err, users) { //iterate through users: how? //first attempt: for for(var i in users) { //simple stuff works here… but if I call something async… […]

在循环中调用asynchronous函数时,Node.JS如何处理循环控制?

我的情况如下:有一个IP地址的数组。 我将testing每个IP连接到远程服务器。 如果一个IP连接,其余的IP将被忽略,不会被连接。 我使用了下面的Node.JS代码来完成这项工作,但似乎无法正常工作。 请提供一些提示。 谢谢! // serverip is a var of string splitted by ";", eg "ip1;ip2;ip3" var aryServerIP = serverip.split(";"); console.log(aryServerIP); var ipcnt = aryServerIP.length; // ipcnt = 3, for example for (ip in aryServerIP) { console.log("to process: " + ipcnt); // error here: always print 3 var net = require('net'); var client […]