【发布时间】:2014-11-25 16:49:40
【问题描述】:
我想使用递归函数,但每个函数都应该在 previuse 完成后运行。 所以我写了这段代码:
var service = ['users', 'news'],
lastSync = {
'users' : false,
'news' : false
};
db.transaction(function (tx) {
lastSyncFunc(tx,service,0).then(function(){
console.log(lastSync);
});
});
function lastSyncFunc(tx,service,index){
deferred = $q.defer();
tx.executeSql("SELECT time FROM last_sync WHERE fService = ? ORDER BY id DESC LIMIT 1", [service[index]], function (tx, result) {
if (result.rows.length > 0) {
lastSync[service[index]] = result.rows.item(0).fTime;
}
return ++index<service.length ? lastSyncFunc(tx,service,index) : deferred.resolve();
});
return deferred.promise;
}
现在我的程序为lastSync.users 和lastSync.users 返回false,因为在函数完全运行之前运行此部分。
【问题讨论】:
-
您不能在
executeSql回调中使用return。在进入特定于应用程序的过程(如递归调用)之前,适当地抽象回调并使用承诺。
标签: javascript angularjs deferred angular-promise