我想从数据库中打印信息。 我是这样做的: 我有全球的一系列主题。 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
答案 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);
}
);
}