2017-11-25 15 views
0

データベースから情報を出力したい。 私はこのようにしています: 私はitmesのグローバル配列を持っています。 1.すべてのレコードをフェッチし、レコード・データをグローバル配列に入れるajax get要求をサーバーに送信する機能。 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が終了するのを待ちますか?

このような状況に対処する最善の方法は何ですか? getDataは、時間、あるいはタイムアウトの任意の量を取ることができますので、

+0

をしてくださいすることができます関数 'getData()'と 'printData()'を投稿しますか?あなたはあなたの 'printData()'を 'getData()'に送り、あなたが応答を受け取ったときにそれをイベントハンドラにすることができます。 – TheMintyMate

答えて

1

アロン

おかげではい、あなたは非常によくprintData機能に問題があることができます。

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); 
    } 
); 
} 
関連する問題