繁体   English   中英

Gnome Javascript:回调不适用于异步功能

[英]Gnome Javascript: callback doesn't work for async functions

我正在尝试从网络套接字读取信息,以在gnome扩展中使用该信息。 为此,我使用了Gio socketclient。 我能够连接并从inputstream读取同步。 但是我在异步阅读方面失败了。 我在以下脚本中隔离了我的问题:

#!/usr/bin/gjs

const Gio = imports.gi.Gio;


var doAsyncCallBack = function(gobject, async_res, user_data) {
    print("ASYNC test: doCallBack");
    let lineout, charlength, error;
    [lineout, charlength, error] = gobject.read_upto_finish(async_res);
    print("ASYNC test: " + lineout + " (" + charlength + ")");
};


let sc = new Gio.SocketClient();
let scc = sc.connect_to_host("kodi", 9090, null);
let dis = new Gio.DataInputStream({ base_stream: scc.get_input_stream() });

//sync
print("sync test: started");
let valuestr, valueint;
[valuestr, valueint] = dis.read_upto("}" , -1,  null);
print("sync test: " + valuestr + " (" + valueint + ")");

//async
print("ASYNC test: started");
dis.read_upto_async("}" , -1,  0, null, doAsyncCallBack);

// keep in a loop.
print("(press [crtl-c] to end)");
while (0 == 0) {};

在我的示例中,从未调用“ doAsyncCallBack”函数。 同步调用起作用,因此服务器正在给出适当的响应。

我在这里找到了一部分信息,但是(kodi)服务器没有发送换行符: gjs如何使用g_data_input_stream_read_line_async在Gnome Shell Extension中读取套接字流

我发现了回调在脚本中不起作用的原因。 基本上,这是代码的最后一部分。

// while (0 == 0) {};
Clutter.init(null);
Clutter.main();

这就是我要做的,才能使其正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM