我是 Node 的新手,我关心的一件事是我如何设计类,当我无法确定它们在完成第一次调用之前不会被再次调用时必须保持状态。
例如
var thing = new Thing();
// Doesn't maintain a state, call it as much as you like
thing.doSomething(function() { alert('done') });
thing.doSomething(function() { alert('done') });
thing.doSomething(function() { alert('done') });
// Maintains some sort of internal state
thing.doSomethingStateful(function() { alert('done') });
// Calling it again messes up the first call if the callback
// hasn't been hit yet because it's still waiting on an I/O
// operation to complete.
thing.doSomethingStateful(function() { alert('done') });
有没有设计模式可以帮助解决这个问题?我是否应该始终努力使 Node 类无状态并使用内部状态对象来跟踪每次调用的状态?或者是否有一种约定来区分可以异步方式使用的类和保持状态的类?
最佳答案
我认为您误解了 node.js 异步模型。
基本上,有一个单个 执行线程从事件队列中弹出回调。但是,在当前函数完成并返回之前,不会调用排队的下一个函数。
之所以称为异步,是因为系统不会阻塞 I/O。相反,您注册一个监听器并等待系统通知您。系统将处理其他事件,直到 I/O 操作完成,因此它会保持自身忙碌。
编辑。 我不明白你的问题。我希望这次修改能解决这个问题。
这真的取决于你在做什么。如果你想允许 doSomethingStateful
的多个同时执行,那么使用内部状态对象绝对是可行的方法。
否则,如果出于某种原因您一次只能处理一个调用,请查看类似 Async.js 的内容用于函数队列实现。
关于javascript - 在异步 Node 类中处理状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21715352/