我正在制作一个javascript小部件(用于Thingsboard平台)。 Thingsboard网站上有一些我无法修改的JavaScript代码正在运行(例如do_some_things
)。我的窗口小部件可以定义诸如func_1
之类的功能,这些功能将由Thingsboard网站运行。
//### THINGSBOARD CODE (can not modify!) ###
function do_some_things() {
...
func_1();
func_2();
...
}
//### WIDGET CODE (can modify!) ###
function func_1() {
socket = new WebSocket("ws://192.168.137.4:8081/");
socket.onmessage=function(evt) {
settings_string = evt.data;
}
/* wait for a message here!*/
return settings_string;
}
在func_1
中,我想返回一些我从websocket服务器检索到的字符串。在收到网络套接字消息之前,如何阻止func_1
的执行?
我已经查看了诺言并等待,但是我看不出有什么帮助,因为我无法允许func_2
在func_1
完成并返回其值之前运行。
(我不在乎整个网站在等待网络套接字时是否冻结)
答案 0 :(得分:0)
谢谢Bergi的评论。
如果您不能修改do_some_things,将会很困难。您 可以将您的工作排队,但是如果do_some_things曾经期望得到回报 值,那么将无法同步提供。一 无法阻止websocket。 –贝尔吉
我接受了该问题,因为无法编辑javascript do_some_things
并希望通过websockets检索数据是无法解决的。
我现在找到了一种解决方法,方法是在与websocket服务器相同的机器上设置一个小型http服务器,该服务器提供包含返回字符串的json文件。我可以以阻止func_1
执行的方式请求文件,如下所示:
function func_1() {
var request = new XMLHttpRequest();
request.open('GET', "http://192.168.137.4:8082/", false);
request.send(null);
if (request.status == 200) {
return request.responseText;
} else {
return "";
}
}
因为XMLHttp支持与websocket不同的同步请求。