Я хочу использовать рекурсивную функцию, но каждая функция должна запускаться после завершения предварительной работы. поэтому я пишу этот код:Рекурсивная функция с отсрочкой
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;
}
теперь моя программа возвращения false
для lastSync.users
и lastSync.users
, потому что запустить этот раздел перед функцией полного запуска.
Вы не можете «вернуть» из обратного вызова 'executeSql'. Правильно абстрагироваться от обратных вызовов и использовать обещания, прежде чем переходить к процедурам, специфичным для приложения, таким как рекурсивный вызов. – Bergi