我做了一个漂亮的桌面,其中包括将网页从网址加载到像这样的变量
let url = 'http://localhost/page.php';
let file = Gio.file_new_for_uri(url).load_contents(null);
let doc=(file[1]+"")
return doc;
这项工作非常适合localhost。问题是当我通过互联网访问某些内容时。每次循环访问此页面时,整个linux冻结1秒。所以我想使用异步方法。当然我不确定这是否会解决我的问题因为我不太确定它做了我认为它做的。但问题是我所有的例子都是回调,我很难理解...功能工作...但结果消失了我完成这个功能的那一刻..所以问题很简单: 有没有办法在getpage函数中返回mes变量?
getpage: function() {
let url = 'http://localhost/page.php';
let message = Soup.Message.new('GET', url)
_httpSession.queue_message(message, function(session, message) {
let mes = message.response_body.data;
});
//like thie
return mes+"";
},
答案 0 :(得分:0)
由于这是一种异步方法,您无法访问mes
函数中的getpage
变量。
以下是getpage
函数的执行顺序:
getpage
函数执行该函数。mes
变量不存在当下载url时,将执行队列消息中注册的函数并设置mes
变量,但在getpage
函数的另一个范围内。
这就是回调函数的异步函数的工作方式。
所以我的建议是使用真正的回调函数并在其中进行治疗:
getpage: function() {
let url = 'http://localhost/page.php';
let message = Soup.Message.new('GET', url)
_httpSession.queue_message(message, real-callback);
},
real-callback: function(session, message) {
let mes = message.response_body.data;
/* do here what you wanted to do at the end of getpage fonction */
}