jQuery异步问题?

布鲁斯

我应该使用该函数的返回值来进行一些控制。即使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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章