如何在不使用回调的情况下使用Soup.SessionAsync将页面加载到字符串中



我做了一个很好的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函数的执行顺序:

  1. 创建Soup Message对象
  2. 在队列消息中注册该函数,但暂时不执行getpage函数
  3. 此时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 */
}

相关内容

  • 没有找到相关文章

最新更新