javascript - Nodejs 阻止代码执行,直到它接收到 TCP 命令(挂起一个 GUI 事件)
问题描述
我正在编写一个从 Java + Rhino 到 nodeJS 的 TCP 服务器 ...
而且我遇到了阻塞执行代码而没有阻塞 TCP 侦听器(socket.on(‘data’, ()=>{}
)的问题……</p>
为什么我需要它:我需要它来从挂起的 GUI 中进行同步响应......在 Java 中它被子 TCP 侦听器进程覆盖,并且在主进程中有一个循环,如:
// simulate message loop
boolean enddialog = false;
int endtype = 0;
try {
while (!end) {
String s = "";
s = ess.dequeueCommand();
if (s.equals("mennu1")) {
end = true;
endtype = 0;
}
if (s.equals("menu2")) {
end = true;
endtype = 1;
}
}
} catch (Exception e) {
}
Deasync 在使数据库调用“同步”方面帮助了我很多……</p>
var deasync = require('deasync');
module.exports = function DB(){
var knex = require('knex')(require("./../../config").DB);
this.executeRowsetParam = (sql, param) => {
let done = false;
knex.raw(sql, param).then((r => {
done = r;
})).catch((e => {
throw "Error in query "+ e
}))
deasync.loopWhile(function () { return !done; });
return done
}
}
我已经尝试过 deasync 但它会阻止事件侦听器......我让它与 Promise 一起工作但在这种情况下它不会工作,因为代码库是用 js 为“旧”服务器编写的,我无法重写该代码库 Promise 示例:
return new Promise( (res) => {
if(this.sel == null){
let callb = (d)=>{
var ed = Buffer.from(d);
this.GetDataStricte(ed).then((da)=>{
res(da);
this.socket.removeListener('data',callb);
});
}
this.sel = this.socket.on('data',callb);
}
});
你可以帮帮我吗?
解决方案
推荐阅读
- c# - 实例化产生的敌人比它应该产生的多(它产生了 2 个)
- java - 如何在弹出窗口顶部显示加载 gif?
- python - 了解 Pandas 中的 .loc 以将变量保存在数据框的特定单元格中
- devops - 回购数据未显示在 hygieia 仪表板中
- azure-functions - 如何在 Azure Function App 中使用 AZ Cli 或 Bash?
- html - 数据绑定
- python - 在熊猫数据框中添加列
- swift - GIDSignIn.sharedInstance : sharedInstance 不是函数?
- java - 权限不足:请求的身份验证范围不足。谷歌云端硬盘
- angular - 在 Visual Studio 2019 项目中更新 Angular 版本