【问题标题】:What is faster event-based or deferred-based handling?什么是更快的基于事件或基于延迟的处理?
【发布时间】:2013-02-24 16:32:39
【问题描述】:

什么更快:

Event.once('some_event', function() { // wait until an event fired from somewhere
  defer.resolve('resolved')
})
...
// somewhere else
Event.emit('some_event')

或smth.like:

defer = doSmthDeferred(); // to get the deferred resolved/rejected from somewhere else
...
// somewhere else
doSmthDeferred = function() {
  defer
  if ...
    defer.resolve();
  else
    defer.reject();
}

即:什么更好 - 事件处理或使用嵌套承诺/延迟处理?承诺/延迟是否基于事件处理?

【问题讨论】:

    标签: node.js events nested deferred promise


    【解决方案1】:

    这几乎是一条红鲱鱼。事件和承诺解决之间的速度差异几乎总是很小。

    事件是为经常发生的事情而设计的。例如到达网络服务器或用户单击按钮的请求。当您将它们用于异步操作时,它们会变得混乱,因为它们不能正确支持组合,即很难等待两个事件都发生 Promise 是为异步操作设计的(例如从服务器请求网页)。它们只能解决一次,因此不适合事件之类的事情。如果您有多个并行或串行发生的异步操作,则 Promise 使组合它们变得非常容易。如果您正在寻找一个好的承诺库,我建议您查看Q

    【讨论】:

    • 谢谢!组合属性很高兴知道,它是 Promise 中非常棒的特性。我现在为一个关于锁定/排队消息的小项目设计了一个模块,但我无法以一种风格解决这个问题:基于承诺,所以有一个地方我需要发出一个事件(当一个元素被解锁时,我需要通知队列以向队列中的另一个元素授予锁定,其中队列有此事件的触发器)。那么这是正常的还是应该只做一种风格?你觉得怎么样?
    • 这两种风格一般可以适当混合搭配。不过,请尝试向外界呈现一个一致的界面。如果你觉得你需要两者都对外界可见,你可能应该编写两个独立的模块,每个模块都做一半的事情。在内部,根据您的描述,您可能不想要完整的事件系统,您可能只想定义一个函数 processQueue 并在元素解锁时调用 processQueue
    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 2013-05-09
    • 1970-01-01
    • 2019-07-10
    • 2017-08-09
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    相关资源
    最近更新 更多