javascript - 如何立即收听来自客户端(vue)的服务器(快递)发送的事件
问题描述
我正在尝试收听来自我的 vue js 客户端的 Express 服务器发送的事件。我想在它发出后立即收听。但直到整个过程完成后才会这样做。
我的 Express 控制器代码是:
exports.getFruits = (req, res, next) => {
const fruits = ["mango", "jackfruit", "banana", ...........];
for(let i = 0; i < fruits.length; i++){
res.emit('fruit', fruits[i]);
}
};
从我的 vue 客户端,我提出了这个请求
axios.get("localhost:3000/get-fruits")
.then(res => {
console.log(res.data);
})
.catch(err => {
console.log(err);
});
我怎样才能在这里收听服务器立即发送的 Emit?任何帮助将不胜感激。
解决方案
这是node.js
任何同步循环的预期行为将始终阻塞线程,并且在循环完成后它将处理其他事件。
请参阅事件循环以获取更多信息,但要了解重点:
有5个阶段
┌───────────────────────────┐ ┌─>│ timers │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ pending callbacks │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ idle, prepare │ │ └─────────────┬─────────────┘ ┌───────────────┐ │ ┌─────────────┴─────────────┐ │ incoming: │ │ │ poll │<─────┤ connections, │ │ └─────────────┬─────────────┘ │ data, etc. │ │ ┌─────────────┴─────────────┐ └───────────────┘ │ │ check │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ └──┤ close callbacks │ └───────────────────────────┘
现在poll
是执行同步代码pending callbacks
的地方,也是处理回调的地方。因此,当阶段移动到poll
它时,已经检查了所有回调和 async/libuv 的东西。所以你for loop
在这里,现在直到它完全执行它才会进入事件循环的下一个阶段并返回到该pending callbacks
阶段。
因此,循环完成后,它将进入其他阶段,并会看到那里有多个 unservices 回调(您的事件),它将一一处理。希望你理解这个概念。
您可以做的一件事是,您可以分叉另一个进程来服务您的事件并发送fruits
使用process.send
而不是事件。然后该进程将立即为事件处理程序提供服务。
推荐阅读
- javascript - 一次设置多个cookie的功能不起作用
- xamarin.forms - Prism Xamarin - 数据绑定未更新
- reactjs - 反应为什么在调用函数初始化状态时状态不更新?
- c# - 如何将 INT 值从 MySQL 数据库分配给 Visual Studio Windows 窗体应用程序
- kubernetes-helm - 为 Helm Chart.yaml 使用外部 version.txt
- mysql - MySQL 使用 node.js 将新对象附加到对象数组中
- vb.net - 'OpenFileDialog' 是一种类型,不能用作表达式
- javascript - React Button无法调用Function组件中的方法
- python - 未找到模块错误:未找到烧瓶模块
- python - Python 在 Windows 上引用旧的 OpenSSL 版本