繁体   English   中英

我如何让JavaScript setTimeout在尝试10次后停止?

[英]How do I get JavaScript setTimeout to stop after 10 tries?

我有jQuery .ajax调用的以下部分。 我相信它每秒检查一次。 10次​​尝试后如何停止?

 success: function (data) {
                    if (!data) {
                        setTimeout(function (inputInner) { CallIsDataReady(inputInner); }, 1000);
                    }

编辑:我实现了一个解决方案,但服务调用的日志记录似乎在2次后停止。

function CallIsDataReady(input) {
            var timer;
            var count = 0;

            $.ajax({
                url: "http://www.example.com/services/TestsService.svc/IsDataReady",
                type: "GET",
                contentType: "application/json; charset=utf-8",
                data: input,
                // dataType: "json",
                success: function (data) {
                    if (!data) {
                        setTimeout(function(inputInner) {
                            CallIsDataReady(inputInner);
                            count++;
                            if (count == 10) {
                                clearInterval(timer);
                                count = 0;
                            }
                        }, 1000);
                    }
                    else {
                        console.log("data returned - calling callUpDateGrid");
                        //Continue as data is ready
                        callUpdateGrid(input);
                    }
                },
                error: function (jqXHR, textStatus, errThrown) {
                    console.log("AJAX call failed in CallIsDataReady");
                    console.log(errThrown);
                }
            });

只需将setTimeout分配给一个变量,并使用一个计数器,当它达到10时,调用clearTimeout()

用户setInterval和一个计数器:

if (!data) {
    var count = 0;
    var interval;
    interval = setInterval(function (inputInner) {
        if (count === 10) {
            clearInterval(interval);
            return;
        }
        CallIsDataReady(inputInner);
        count++;
    }, 1000);
}
  // global variable - should be outside your ajax function
 var timer;
 var count = 0;

 ....
 success : function( data) {
               if( ! data ) {
                  // don't know where you are getting inputInner. assuming its a global variable
                  timer = setInterval ( function ( inputInner ) { 
                                            CallIsDataReady(inputInner);
                                            count++; 
                                            if ( count == 10 ) { 
                                              clearInterval(timer); 
                                              count = 0;
                                            }  
                                        }, 1000);
                }
           }

使用间隔

var count = 0,
    handler = setInterval(dostuff, 1000);

function dostuff(inputInner){

   //CallIsDataReady(inputInner);

   if(++count === 10)
       clearInterval(handler);
}

http://jsfiddle.net/mGgLz/

但是,您永远不应依赖于ajax调用始终花费<1000ms的假设。 检查XHR上的readyState并确保它是4,然后再次轮询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM