javascript:运行需要来自另一个异步函数的结果的函数

时间:2017-11-25 16:31:13

标签: javascript ajax get

我想从数据库中打印信息。 我是这样做的: 我有全球的一系列主题。 1.具有ajax的函数获取服务器的请求,该请求获取所有记录并将记录数据放入全局数组中。 2.从全局数组中打印数据的函数。

var items = []
function initPage() {
  getData(); / function that gets data from database and put in array
  printData(); / function that prints data to html
}

我的问题是: 我在我的电脑上运行这一切所以它运行得很快,我没有问题。 但是,如果我将所有内容都移到互联网上并且查询运行速度较慢,那么我是否会遇到printData函数问题?可以在getData完成之前运行吗? 或者它等待getData完成?

处理这种情况的最佳方法是什么?

谢谢Alon

1 个答案:

答案 0 :(得分:1)

是的,您很可能遇到printData功能问题,因为getData可能会花费任何时间甚至超时。

在这种情况下,Javascript承诺是你最好的朋友: - )

您的getData函数应该执行以下操作:

function getData() {
  var url = 'http://blah.com/blah';
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.onload = () => resolve(xhr.responseText);
    xhr.onerror = () => reject(xhr.statusText);
    xhr.send();
  });
}

更改您的代码:

var items = []
function initPage() {
  getData().then(
    function(data) {
      printData(data);
    },
    function(error) {
      printMessage(error);
    }
  );
}