Tag: javascript events

Nodejs:如何处理对象之间的事件监听?

我目前有问题,我有一个对象,应该听另一个对象。 问题是:我应该如何处理订阅? 目前,我只知道两种可能的方式: 与注册人: var Registrator = function() { this.listener = new Listener(); }; Registrator.prototype.register = function(subsriber) { var self = this; subscriber.on('event', function(info) { self.listener.doSomething(info); }); }; 在构造函数中: var Subscriber = function() { var listener = require('./instanced-listener'); this.on('event', function(info) { listener.doSomething(info); }); }; 正如你所看到的,两种方法都不是那么简洁。 还有另外一种模式可以用来解决这个问题吗? 问候 PS: 如果这个例子看起来太抽象了,这里是来源: https://github.com/bodokaiser/documents/blob/master/lib/repository.js 检查构造函数,看看我的不快:)

在node.js中过滤Stream对象

在我看来,处理Node.js中某些types数据的一种优雅的方式是链处理对象,比如UNIXpipe道。 例如,grep: function Grep(pattern) { … } util.inherits(Grep, stream.Stream); Grep.prototype.???? = ??????? // What goes here? grep = new Grep(/foo/); process.stdin.pipe(grep); myStream.pipe(process.stdout); 然而,我不完全清楚如何覆盖各种stream方法才能使其工作。 我怎样才能创build一个Stream对象,只需从其input复制到其输出? 据推测,更复杂的过滤stream变得微不足道。 更新:感觉好像下面的工作(用CoffeeScript表示,所以我不用JS语法填充这个框): class Forwarder extends stream.Stream write: (chunk, encoding) -> @emit 'data', chunk end: (chunk, encoding) => if chunk? @emit 'data', chunk @emit 'end' fwd = new Forwarder() fwd.pipe(process.stdout); process.stdin.pipe(fwd); process.stdin.resume(); […]

Node.js – 从模块发射事件的最佳方法

我一直在玩EventEmitter,但我很困惑我该如何从一个模块实现它。 我已经看到了几种不同的方式,他们似乎都工作。 这里有一些我见过的: 从这里 : var Twitter = function() {…}; Twitter.prototype = new events.EventEmitter; 但是在“掌握节点”中,他们这样做: function Dog(name) { this.name = name; EventEmitter.call(this); } Dog.prototype.__proto__ = EventEmitter.prototype; (为什么你需要打电话?) 然后在我自己的代码中,我尝试了另一种方式: function Class() {} Class.prototype = EventEmitter.prototype; 他们都是以自己的方式inheritanceEventEmitter,所以最简单的解决scheme不是最好的?

是否有一个通用的机制来超时node.js中的事件?

我正在学习node.js,我能find的大多数例子都是处理简单的例子。 我更感兴趣的是构build真实世界的复杂系统,并估计node.js基于事件的模型如何处理实际应用程序的所有用例。 我想要应用的一种常见模式是让阻止执行超时,如果它没有在一定的超时时间内发生。 例如,如果执行数据库查询需要30秒以上,那么对于某些应用程序来说可能太多了。 或者如果读取文件需要10秒以上的时间。 对于我来说,超时的理想程序stream程与具有例外的程序stream程相似。 如果某个事件在某个预定义的超时限制内没有发生,那么事件监听器将被从事件循环中清除,并产生一个超时事件。 这个超时事件将有一个替代的监听器。 如果事件处理正常,则从事件循环中清除超时侦听器和事件侦听器。 有超时处理和清理超时过程的一般机制吗? 我知道一些types,如套接字有超时参数,但它不是一个适用于所有事件的一般机制。

Javascript中组合延迟函数调用

我不太确定这是什么技术术语。 我有一个交互式graphics界面。 在用户与GUI交互之后,我需要执行一些CPU密集型操作。 但是,用户input非常频繁,所以我只想在没有用户input的1000ms之后调用这个函数。 在我使用的模式下面: scheduler = (function(){ var timer; function exec(call, delay){ clearTimeout(timer); timer = setTimeout(call, delay); }; return exec; })() 也就是说,如果3个scheduler调用是一个接一个完成的,那么只有最后一个调用scheduler会被执行: scheduler(function(){alert('foo')}, 1000); scheduler(function(){alert('bar')}, 1000); scheduler(function(){alert('zoo')}, 1000); 它似乎工作,但感觉有点哈克我有点担心Javascript setTimeout任何警告,特别是范围的问题。 这看起来像是我可以在更大规模上使用的可靠模式吗? 我调用scheduler的内联函数是否可以像往常一样在其词法范围内查找所有对象,何时由settimeout调用? 如果我有几个这样的调度器实例呢? 他们能互相干扰吗? 有没有其他办法来完成这个?

node.js – 按时附加事件处理程序

我正在学习node.js,并在node.js手册中遇到了这个例子: … var req = http.request(options); req.end(); req.on('upgrade', function(res, socket, upgradeHead) { console.log('got upgraded!'); socket.end(); process.exit(0); }); … 我在这个例子中看到的是,处理程序附加到HTTP请求的事件,请求被创build后,甚至被发送(预定)之后 。 为了让事情变得更糟,手册说: 如果这个事件没有被监听,那么接收到升级头的客户端将closures它们的连接。 在 req.on(… 之前是不是有可能发生事件req.on(…有机会附加一个处理程序?我怀疑我不明白在node的asynchronous模型中有什么东西,或者这个代码是从node中手动devise的,希望networking请求将花费比执行下一行代码更长的时间? 另一个例子: http.get("http://www.google.com/index.html", function(res) { console.log("Got response: " + res.statusCode); }).on('error', function(e) { console.log("Got error: " + e.message); }); 这里,HTTP请求将在创build对象后立即启动,并且仅在之后才附加error handling程序。 再说一遍,(1)它是一种仅仅因为networking延迟而起作用的代码,(2)我没有得到关于node.js概念的东西,或者(2b)事件会“等待”,直到我附加一个处理程序为止。 编辑 :甚至更好的例子,也从手册。 下面的好的和坏的例子是不同的,因为在好的例子中,我们附加事件足够快,因此错过数据的机会很less ,或者这样不可能错过数据 (为什么?) // Good request.on('response', function […]

build议在JavaScript中创build一个微框架

我想知道在node.js之上创build一个框架需要什么步骤。 我相信这可以是一个很好的学习方式,这就是为什么我这样做! 我一直在检查其他微型框架和更大的框架,但我无法理解从哪里开始。 我想就此提出你的build议。 谢谢。 编辑:像Sinatra,Merb,Rails的MVC框架。

chrome浏览器事件循环与节点事件循环之间是否存在显着差异?

Philip Roberts在解释浏览器事件循环方面做得非常出色,在调用堆栈,事件循环,任务队列和webapis之类的“外部”线程之间提供了一个清晰的解释。 我的问题是做这些并行在Node事件循环等价的组件,他们被称为基本相同的东西。 也就是说,当我使用Node的文件和Web I / O库进行调用时,这些事件发生在堆栈之外,其callback在一个任务队列中排队?

节点subprocess事件监听

我使用节点child_process API https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options var child = child_process.spawn(cmd, val, options); 从孩子我使用以下 child.stdout.pipe(process.stdout); child.stderr.pipe(process.stderr); 我可以在这些pipe道事件里面添加一些像console.log这样的代码吗? 例如可能与原型 child.on('error', function(err) { console.log(err); }); 更新 我需要的是听这个childProcess.stderr.pipe(process.stderr); 如果我得到和错误做process.exit(1) 当我尝试像我有错误的东西 child.stderr.pipe(function () { console.log("im here"); process.stderr; process.exit(1); } ); UPDATE2 我尝试以下 var child = child_process.spawn(cmd, value, opt); child.stdout.on('data', function (data) { console.log("IM HERE"); console.log('data' + data); }); child.stderr.on('data', function (data) { console.log("IM […]

addListener在node.js中做什么?

我想了解node.js中addListener的用途。 有人可以解释一下吗? 谢谢! 一个简单的例子是: var tcp = require('tcp'); var server = tcp.createServer(function (socket) { socket.setEncoding("utf8"); socket.addListener("connect", function () { socket.write("hello\r\n"); }); socket.addListener("data", function (data) { socket.write(data); }); socket.addListener("end", function () { socket.write("goodbye\r\n"); socket.end(); }); }); server.listen(7000, "localhost");