0
我有以下函數工作正常,直到我試圖從此assync函數調用另一個assync請求。如果我試過它輔助assync函數總是返回異常。如果從assync請求調用assync請求,那麼Angular沒有方法'then'
「有博法‘那麼’」
有沒有人知道是什麼導致可以,而我怎麼能解決呢普萊舍?
感謝您的任何幫助。
首先assync功能
$scope.getData = function() {
var deferred = $q.defer();
var DATE_FROM = dateFrom;
var DATE_TO = dateTo;
// INSTANTIATE DB CONNECTION
db = window.sqlitePlugin.openDatabase({name:"callplanner"});
var numberOfProcessed = 0;
for(var ic=0; ic < dateRanges.length; ic++) {
var sqlQuery =
"SELECT '"+dateRanges[ic].DATE_FROM+"' as DATE_FROM, "+
" '"+dateRanges[ic].DATE_TO+"' as DATE_TO, "+
" COUNT(*) AS DIALS_CNT, "+
" SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_APPT+"' THEN 1 ELSE 0 END) AS '"+APPT_CNT+"', "+
" SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_CONV_NO_APPT+"' THEN 1 ELSE 0 END) AS '"+CONVERS_CNT+"' , "+
" SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_CANNOT_REACH+"' THEN 1 ELSE 0 END) AS '"+CANNOT_REACH_CNT+"' "+
" FROM "+DIALED_CALLS_TABLE+" dc "+
" WHERE dc.date BETWEEN '"+dateRanges[ic].DATE_FROM+"' AND '"+dateRanges[ic].DATE_TO+"';";
// PRINT QUERY
console.log(sqlQuery);
// PUSH QUERY TO ARRAY
sqlQueries.push(sqlQuery);
// PROCESS TRANSACTION
db.transaction(function(tx) {
// init empty array for results
tx.executeSql(sqlQueries[numberOfProcessed], [], function(tx,results){
for (var i=0; i < results.rows.length; i++){
//process your result from sql
numberOfProcessed++;
row = results.rows.item(i);
// Replace null values
if(row.APPT_CNT == null)
row.APPT_CNT = 0;
if(row.CONVERS_CNT == null)
row.CONVERS_CNT = 0;
if(row.CANNOT_REACH_CNT == null)
row.CANNOT_REACH_CNT = 0;
// End of replacing null values
row.YOUR_GOAL = $rootScope.goalValue;
row.YOUR_DEFICIT = DialsComputeService.computeDailyDeficit(row);
row.SUCCESS_RATE = DialsComputeService.computeSuccessRateDaily(row);
//row.SUCCESS_RATE_SINCE = DialsComputeService.computeSuccessRateSinceStart(row);
// GET DATA IN ASSYNC TASK
DialsComputeService.computeSuccessRateSinceStart.then(function(result){
// THIS GIVES THE VALUE:
//alert("Result is" + JSON.stringify(result));
console.log("Returned Result is: " + JSON.stringify(result));
try{
row.SUCCESS_RATE_SINCE = result;
} catch (e) {
$ionicLoading.show({
template: $translate.instant('ERROR'),
duration:1000
});
}
}, function(e){
$ionicLoading.show({
template: $translate.instant('ERROR_DATABASE'),
duration:1000
});
});
// END GET DATA IN ASSYNC TASK
statsData.push(row);
console.log("Result row is: " + JSON.stringify(row));
if(numberOfProcessed == dateRanges.length){
deferred.resolve(statsData); // resolve your promise when you are sure you handled everything
}
}
});
},function (e) {
alert("ERROR: " + e.message);
deferred.reject(e);
});
}
return deferred.promise;
};
二assync服務功能:
computeSuccessRateSinceStart: function(row) {
var deferred = $q.defer();
console.log("Trying to compute daily success rate since until" +row.DATE_TO);
var sqlQuery =
"SELECT " +
"("+
"SELECT COUNT(*) "+
"FROM dialed_calls AS dc "+
"WHERE dc.date < '"+row.DATE_TO+"'" +
") " +
"AS DIALS_CNT ," +
"("+
"SELECT COUNT(dc.call_result) "+
"FROM dialed_calls AS dc "+
"WHERE dc.call_result = 'APPT_CNT' "+
"AND "+
"dc.date < '"+row.DATE_TO+"'" +
") " +
"AS APPT_CNT ;";
console.log(sqlQuery);
db = window.sqlitePlugin.openDatabase({name:"callplanner"});
// GET APPT COUNT
db.transaction(function(tx) {
tx.executeSql(sqlQuery, [], function(tx,results){
// init empty array for results
for (var i=0; i < results.rows.length; i++){
row = results.rows.item(i);
//Udpate date for writeout
//row.DATE = moment(row.DATE).format('ddd DD.M');
console.log("row APPT count is " + JSON.stringify(row));
alert(JSON.stringify(row));
var successRateFromSince;
successRateFromSince = row.APPT_CNT/row.DIALS_CNT * (100);
successRateFromSince = Math.round(successRateFromSince);
if(isNaN(successRateFromSince)) {
successRateFromSince = 0;
}
console.log("Success rate since is " +successRateFromSince);
}
deferred.resolve(successRateFromSince);
});
},function (e) {
alert("ERROR: " + e.message);
$ionicLoading.show({
template: $translate.instant('ERROR_DATABASE'),
duration:1000
});
});
return deferred.promise;
}
};
地點錯誤的發生:
// GET DATA IN ASSYNC TASK
DialsComputeService.computeSuccessRateSinceStart.then(function(result){
// THIS GIVES THE VALUE:
//alert("Result is" + JSON.stringify(result));
console.log("Returned Result is: " + JSON.stringify(result));
try{
row.SUCCESS_RATE_SINCE = result;
} catch (e) {
$ionicLoading.show({
template: $translate.instant('ERROR'),
duration:1000
});
}
}, function(e){
$ionicLoading.show({
template: $translate.instant('ERROR_DATABASE'),
duration:1000
});
});
// END GET DATA IN ASSYNC TASK
指出代碼中您遇到問題的位置會非常有幫助。 – 2014-12-01 20:05:47
我解決了關於錯誤發生的代碼片段的問題。 – redrom 2014-12-01 20:09:07