2017-11-25 358 views
0

我想从数据库打印信息。 我这样做: 我有它的全球阵列。 1.使用ajax的函数获取请求到获取所有记录并将记录数据放入全局数组的服务器。 2.打印来自全局数组的数据的函数。javascript:需要另一个异步函数结果的运行函数

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完成?

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

感谢阿龙

+0

可以请你发布你的函数'getData()'和'printData()'?您可以将'printData()'发送到'getData()',并在获得响应时将其设置为事件处理程序。 – TheMintyMate

回答

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); 
    } 
); 
} 
相关问题