Mad*_*gan 1 javascript asynchronous promise angularjs
我理解在简单场景中使用promises但是当前在使用for循环和对本地sqlite数据库进行一些更新时如何实现某些东西时确实很困惑.
代码如下
surveyDataLayer.getSurveysToUpload().then(function(surveys) {
var q = $q.defer();
for (var item in surveys) {
var survey = surveys[item];
// created as a closure so i can pass in the current item due to async process
(function(survey) {
ajaxserviceAPI.postSurvey(survey).then(function(response) {
//from response update local database
surveyDataLayer.setLocalSurveyServerId(survey, response.result).then(function() {
q.resolve; // resolve promise - tried only doing this when last record also
})
});
})(survey) //pass in current survey used to pass in item into closure
}
return q.promise;
}).then(function() {
alert('Done'); // This never gets run
});
Run Code Online (Sandbox Code Playgroud)
任何帮助或协助将不胜感激.我可能正在努力研究如何最好地在循环内执行异步调用,这会进行另一次异步调用以进行更新,然后在完成后继续.
至少承诺让我摆脱了回调地狱.
干杯
这个答案将让你在JS会议上得到答案(虽然没有保证)
surveyDataLayer.getSurveysToUpload().then(function(surveys) {
return Promise.all(Object.keys(surveys).map(function(key) {
var survey = surveys[key];
return ajaxserviceAPI.postSurvey(survey).then(function(response){
return surveyDataLayer.setLocalSurveyServerId(survey, response.result);
});
}));
}).then(function() {
alert('Done');
});
Run Code Online (Sandbox Code Playgroud)