为什么不的setTimeout延迟功能的执行?(why settimeout not delay t

2019-07-17 12:00发布

function tryToDownload(url)
{

       oIFrm = document.getElementById('myIFrm');
       oIFrm.src = url;
      // alert(url);
      // url=escape(url);

      setTimeout(deletefile(url), 25000); 
}

以下是deletfile功能

function deletefile(url){

$.ajax({
    type:'post',
    url: "<%= addToDoDeleteDownloadFile %>",
    data:{filename:url},
    type : "GET",
    timeout : 20000,
    dataType : "text",
    success : function(data) {
        alert("success");

    }
    });
}

以上是我的jQuery和IM停靠经过25秒结束一个功能,但一些如何它不是延迟DELETEFILE(URL)功能,只执行after.So应该是什么问题呢?

Answer 1:

在这行你打电话给你的功能和它的结果传递给setTimeout()

setTimeout(deletefile(url), 25000);

如果要延迟执行,添加一个包装函数:

setTimeout( function(){ deletefile(url); }, 25000);

编辑

通过@Petah提出了另一种:

setTimeout(deletefile, 25000, url);

传递给所有参数setTimeout()的延迟之后,将被传递到执行的功能。 所以在这种情况下,您通过参考功能,延迟,然后将参数的顺序的功能!

需要注意的是,根据MDN传递参数IE9之前的IE浏览器无法正常工作的这种方式。



Answer 2:

那是因为你调用的函数,并使用setTimeout调用的返回值。 包装在一个匿名函数,以便它是由所谓的setTimeout:

function tryToDownload(url) {

    oIFrm = document.getElementById('myIFrm');
    oIFrm.src = url;
   // alert(url);
   // url=escape(url);

   setTimeout(function() { deletefile(url); }, 25000);

}


文章来源: why settimeout not delay the function execution?