2017-03-08 6 views
1
angular.forEach(tableName, function(value, key){ 
console.log("value ", value) 
getFormsService.getTableData(value).then(function(dynResponse){ 
    console.log("key",key," dynResponse", dynResponse.data) 
      }); 
}); 

を待っていないtableNameのは、テーブル名アレイ EXが含ま角度foreachのは、上記のコードでは、サーバ応答

"value ", table1 
    "value ", table2 
    "value ", table3 
    "value ", table4 

    "key",2," dynResponse", array(5 records) 
    "key",1," dynResponse", array(10 records) 
    "key",3," dynResponse", array(20 records) 
    "key",0," dynResponse", array(50 records) 

予想される出力:

、10、5、20件のレコード

私の出力を持つテーブル

"value ", table1 
"key",0," dynResponse", array(50 records) 
"value ", table2 
"key",1," dynResponse", array(10 records) 
"value ", table3 
"key",2," dynResponse", array(5 records) 
"value ", table4 
"key",3," dynResponse", array(20 records) 


help me to get expected output 

Thanks 
+0

それがあなたを助けた場合、答えを受け入れることを忘れないでください:) –

答えて

0
angular.forEach(tableName, function(value, key){ 
    getFormsService.getTableData(value).then(function(dynResponse){ 
     console.log("value ", value) 
     console.log("key",key," dynResponse", dynResponse.data) 
    }); 
}); 

私はあなたが正確にしたいことはわかりません。サービス要求を同期的に実行するには、all()メソッド$qサービスを使用できます。

0

ここでgetFormsService.getTableDataコールバックは非同期呼び出しです。したがって、ループ・スレッドとサービス・スレッドは、その別のスレッドをまとめて連鎖することはありません。

// this line does not wait for service callback to be completed. 
angular.forEach(tableName, function(value, key){ 

    // this is an a asynchronous call 
getFormsService.getTableData(value).then(function(dynResponse){ 
    console.log("key",key," dynResponse", dynResponse.data) 
      }); 
}); 

あなたは1本の電話をかけるか、JavaScriptが常に同期してシングルスレッドであるこの

var inUse=false; 
    angular.forEach(tableName, function(value, key){ 

    while (!inUse) { 
     //waiting call might be costly you can try wait here as well 
     } 

    inUse=true; 
     // this is an a asynchronous call 
    getFormsService.getTableData(value).then(function(dynResponse){ 
       console.log("key",key," dynResponse", dynResponse.data) 
       inUse=false; 
       }); 
    }); 
0

のようなものを使用するようにサービスを変更することができます。あなたはサービスコードを呼んでいるので、応答を得るまで待つことはありません。それはコードの残りの部分を実行し、応答が受け取ったときに残りのコードを実行します。

JavaScriptは、たとえばAjax呼び出しを行うことができるという点で非同期のみです。コールは、コールが返されるまで(正常にまたは他の方法で)呼び出され、コールバックが同期して実行されるまで実行を停止します。

function FirstFunction(callback) { 
    angular.forEach(tableName, function(value, key){ 
     console.log("value ", value); 
    }); 
    callback(); 
} 

FirstFunction(function() { 
    getFormsService.getTableData(value).then(function(dynResponse){ 
     console.log("key",key," dynResponse", dynResponse.data) 
    }); 
}); 
関連する問題