我做了一个很好的desklet,它将页面从url加载到像这样的变量中
let url = 'http://localhost/page.php';
let file = Gio.file_new_for_uri(url).load_contents(null);
let doc=(file[1]+"")
return doc;
这在本地主机上工作得很好。问题是当我通过互联网访问某些内容时。每次循环访问此页面时,整个linux都会冻结大约1秒。所以我想使用async方法。当然,我不确定这是否能解决我的问题,因为我不太确定它能达到我认为的效果。但问题是,我所有的例子都是关于回调的,我很难理解。。。函数工作。。。但是当我完成这个函数的时候,结果就消失了。。所以问题很简单:有什么方法可以在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+"";
},
由于它是一个异步方法,您不能访问getpage
函数中的mes
变量
以下是getpage
函数的执行顺序:
- 创建Soup Message对象
- 在队列消息中注册该函数,但暂时不执行
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 */
}