私は、ユーザーがすべてのツアーは、ユーザーがで遊ぶことができる部品の量を持っている問題が
(データはAPIからである)ツアーを再生することができ、イオンのプロジェクトを構築していますが呼び出されます地図上のある点。このアプリは100%のオフラインアプリでなければならないため、ユーザーがツアーのコードを入力すると、そのデータをAPIから取得してからユーザーが進めるようにする必要があります(ツアーのすべてのデータをオフラインにする)。すべての部分には、アプリの開始時にダウンロードされている画像、ビデオ、オーディオがあります。
問題は、すべてのデータをダウンロードしている関数呼び出しが同期していないことです。 console.logは、すべてのデータがダウンロードされる前に関数がすでに終了していると言っています。以下のコードの断片:
function getAndFillFullTour() {
vm.showLoader = true;
// load data
TourFactory.getFullTour(vm.tourData.number, function(data){
if(data.state == 'success'){
vm.tourData = data;
var test = downloadData(function(){
// hide loader and continue tour
});
} else {
console.log('error');
}
});
}
この機能は、ユーザーがデバイスにダウンロード取得する必要がある各部分の画像のパスを含む完全なツアーを取得している工場を呼び出します。
function downloadData(callback) {
angular.forEach(vm.tourData.parts, function(value, key){
var part = value;
var i = key;
if(part.image !== "") {
TourFactory.getPartImage(part, tourId, function(data){
vm.tourData.parts[i].partImage = data;
console.log('executed with picture ' + i);
});
}
});
if(callback)
callback();
}
残念ながら、forloop自体が同期実行されているが、工場出荷時の呼び出しが完了するのを待っていません:downloadData機能は次の関数です。私は約束をもってたくさんの選択肢を試しましたが、運がありません。誰でも助けてくれますか? downloadData呼び出しからの応答を得るためにhttp呼び出しが完了するのを待つ必要があります。
getPartImage()は単なる例であり、downloadData呼び出しで応答を取得する前に、最初に完了する必要があるループ用の5つの関数があります。
['forEach'は何も待っていません](http://stackoverflow.com/a/37576787/1048572)。 – Bergi
約束を使用しようとしてください。 – Bergi