我应该使用该函数的返回值来进行一些控制。即使res的值变为“ when-then”过程的错误结果,hasIllegalRoute函数返回,res也为true。因为jquery异步工作,所以不用等到when-then操作返回res的值。我怎么解决这个问题?
function hasIllegalRoute()
{
var res = true;
$.when(returnUncompletedRoute()).then(function(routeList)
{
if(routeList.length>0)
{
var uncompletedRoute = 0;
var today = new Date();
routeList.forEach(function(e)
{
var routeDate = new Date(e.ROUTE_DATE);
if(calcDay(routeDate) != calcDay(today))
{
uncompletedRoute++;
}
});
if(uncompletedRoute>0)
{
$("#errorPageRouteMenu").append("<p>Sonlandırılmamış kayıtlarınız var, bu kayıtları sonlandırmadan yeni bir rotaya başlayamazsınız</p>");
return false;
}
}
}).then(function(result)
{
res = result;
});
return res;
}
我通过转向函数的回调类型解决了这个问题。
function hasIllegalRoute(callback)
{
var errorMsg;
$.when(returnUncompletedRoute()).then(function(routeList)
{
//filter query döndürdüğü için toList fonksiyonu ile promise'e çevirdik
//query boş iken toList 0 uzunluğunda liste döndürdü onu kontrol ettik
if(routeList.length > 0)
{
var uncompletedRoute = 0;
var today = new Date();
routeList.forEach(function(e)
{
var routeDate = new Date(e.ROUTE_DATE);
if(calcDay(routeDate) != calcDay(today))
{
uncompletedRoute++;
}
});
if(uncompletedRoute > 0)
{
errorMsg = ("<p>Sonlandırılmamış kayıtlarınız var, bu kayıtları sonlandırmadan yeni bir rotaya başlayamazsınız</p>");
}
return errorMsg;
}
}).then(function(result)
{
if(typeof callback === "function")
{
callback(result);
}
});
}
//Rotanın tarih kontrolü ve tamamlanmamış veya gönderilmemiş rota kontrolleri. Kontrol sonucunda, varsa hata mesajı döndürülür.
function checkRouteDailyRecord(callback)
{
var errorMsg;
$.when(returnRouteDailyRecord()).then(function(e)
{
var transferStatus = e.TRANSFER_STATUS;
var routeItem = returnRouteDailyList(e.ROUTE_DAILY_ID) ;
//Sorgudan kayıt dönmüyorsa hiç gün başlamamış demektir.Rotaya başlanabilir.
// return sonucunda result değeri undefined olur, hata mesajı gösterilmez ve checkRoute değeri false kalır
if(routeItem.length == 0)
errorMsg = undefined ;
//Gönderilmiş ve gün sonu yapılmış rotaların sayısını hesaplama
if(transferStatus == 1 && routeItem.COMPLETED == 1)
errorMsg = ("<p>Tüm verileriniz gönderilmiş olarak işaretlenmiş. Veri almadan rotaya başlayamazsınız</p>");
if(transferStatus == 0 && routeItem.COMPLETED == 0)
{
today = new Date();
var routeDate = new Date(routeItem.ROUTE_DATE);
//Rota listesinden dönen rotaların tarihlerinin, bugün ile tek tek karşılaştırılması.
//Eğer bugun harici bir rotanın rota sonu yapılmamışsa yeni rotaya başlanamaz.
if(calcDay(today) != calcDay(routeDate))
{
errorMsg =('<p>' + routeDate + 'tarihine ait tamamlanmamış rotanız bulunmaktadır. Lütfen sistem yöneticinize danışınız.</p>');
}
}
// if(routeItem.COMPLETED == 1),
// {
// read only
// }
return errorMsg;
}).then(function(result)
{
if(typeof callback === "function")
{
callback(result);
}
}).fail(function()
{
if(typeof callback === "function")
{
callback(errorMsg);
}
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句