簡體   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