2017-11-17 3 views
0

私は約束のループをすることができません。AngularJS:ループで約束

プロバイダのリストを取得するためにサービスコールを行い、プロバイダごとに別のサービスコールを呼び出して顧客を取得します。

プロバイダには1人以上の顧客がいます。したがって、顧客の最終的なリストが装飾され表示される。他のフォーマットでは

私が達成しようとしています:私は次のコード書かれている

*serviceA.getProvider(){ 

    foreach(providers){ 

    foreach(provider.customerID){ 

    serviceB.getCustomer(customerId) 

    } 

    } 

} 
.then( 

    foreach(Customer){ 

    updateTheCustomer; 

    addUpdatedCustomerToAList 

    } 

displayUpdatedCustomreList(); 

)* 

は、それはあなたがそれの内側にreturnを使用するときに停止しない

doTheJob(model: Object) { 
    let A = []; 
    let B = []; 

let fetchP = function(obj) { 
    obj.Service1.fetchAllP().then(function (response) { 
    let P = cloneDeep(response.data); 

    _.forEach(P, function(prov) { 
     _.forEach(prov.CIds, function(Id) { 
     A.push(Id); 
     }); 
    }); 

    _.forEach(A, function(CId) { 
     return obj.Service2.getById(CId);//what works is if this statement was: return obj.Service2.getById(A[0]); 
             //So, clearly, returning promise inside loop isn't working 
    }); 
    }) 
    .then(function(response) { 
    B.push(response.data); //This response is undefined 

    angular.forEach(B, function (value) { 
     obj.updateAdr(value) 
    }); 

    obj.dispay(B); 
    }); 
}; 
fetchP(this); 


} 

答えて

0

forEachが動作していません代わりにプレーンループを使用してみてください。なぜ、forでループしないのですか?あなたは価値が失われることforループの中にコールバックの内側に戻る場合は、それが呼び出し元に返されていないことから、@Ze Rubeusで述べたように

0
_.forEach(A, function(CId) { 
    return obj.Service2.getById(CId); 
} 

は、おそらくあなたは、この

return Promise.all(A.map(function(CId){ 
    //collect each promise inside an array that will then be resolved 
    return obj.Service2.getById(CId); 
}) 
+0

カリムのようなものを望んでいた、あなたはスターです!あなたのソリューションは全く驚異的に機能しました!ありがとう – TPats

+0

喜んで助けました;) – Karim

+0

@TPats答えを正しいとマークしてください:) – Karim