0

我制作了一个不错的桌面,其中包括将页面从 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 秒。所以我在考虑使用异步方法。当然,我不确定这是否会为我解决问题,因为我不太确定它是否符合我的想法。但问题是我的所有示例都带有回调,我很难理解......函数工作...但是结果在我完成这个函数的那一刻消失了..所以问题很简单:有没有办法在 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+"";
}, 
4

1 回答 1

0

由于它是一种异步方法,因此您无法访问函数mes中的变量getpage
下面是getpage函数的执行顺序:

  1. 汤消息对象的创建
  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 */
}
于 2013-07-11T07:58:31.047 回答