2017-11-25 356 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); 
    } 
); 
} 
相關問題