ループを使用してサーバーにデータを更新し、サーバーからの応答を受信すると、ローカルdbのすべての更新を完了する前にローカルデータベースで更新されます。解決され、1つのデータのみが更新されます。誰も私の周りのすべてのプロセスを完了する前に、約束がなぜ解決されるのか教えていただけますか?ループプロミスを完了する前に解決する
function updatecategories (data, categoryname) {
var defer = $q.defer();
var proms = [];
var prom;
$log.log('Change in daybook change got called', data);
$log.log('Change in daybook change got called', categoryname);
for (var i = 0; i < data.length; i++) {
delete data[i].is_synced;
data[i].category = categoryname;
save(data[i]).then(function (result) {
$log.log('values changed in daybook', result);
proms.push('success');//only one data is getting synced to server rest is not by nid on 10-10
}, function (err) {
$log.log('error in update to daybook', err);
});
}
$q.all(proms).then(function() {
defer.resolve('success');
});
return defer.promise;
}
また、https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –
forループが最初に終了します。それまでに私はdata.lengthであり、おそらく最後の約束だけが解決されます。したがって、以下に示すように、約束の結果ではなく約束を配列にプッシュしたいとします。 – Shilly
なぜ 'proms'が完了するのを待っていますか?解決する必要があるものは何もありません。非同期でいっぱいですが、代わりにsave文をpushして – Icepickle