javascript - 在异步 Node 类中处理状态

标签 javascript node.js typescript

我是 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/

相关文章:

javascript - 从 HTML 输入 onchange 属性调用 TypeScript 文件中定义的函数

javascript - 如何获取 Canvas 光标点击坐标

Javascript:如何获取图像URL的宽度

带有参数的 Angular 2 http.get

node.js - 在 firebase 云函数中创建方形缩略图

node.js - 在保留原始错误的 Node 中运行 next(new Error())

Typescript 0.8.2 - 使用指定的输出文件在保存时编译

javascript - 如何设置 webworker.js 文件的 url 以使其在库而不是主项目中可见

javascript - 为什么javascript在 'return false'之后工作?

node.js - 从 View 中的express-handlebars中添加脚本