【问题标题】:Gnome Javascript: callback doesn't work for async functionsGnome Javascript:回调不适用于异步函数
【发布时间】:2017-07-07 23:46:33
【问题描述】:

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

#!/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 How to read a socket stream in Gnome Shell Extension using g_data_input_stream_read_line_async

【问题讨论】:

    标签: javascript sockets asynchronous gnome-shell


    【解决方案1】:

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

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

    这是我必须做的,才能让它发挥作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2020-11-16
      • 2012-02-25
      • 2017-12-19
      • 2022-06-16
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多