2012-07-30 44 views
0

我想在一个函数中暂停一段特定时期的中间暂停(5秒)在javascript函数

这是我尝试过,但它不工作

(function MessagesAjax() { 
    $.post('/api/messages/get', function(data) { 
     for (var i = 0; i < data.length; i++) { 
      $.jGrowl(data[i].Body.toString().substring(0, 150), { header: 'New Message', sticky: true, }); 
      markDisplayed(data[i].Id); 
     } 
     setTimeout(MessagesAjax, 5000); 
    }); 
})(); 

function markDisplayed(id) { 
    setTimeout(5000);    //want it to pause here 
    $.post("/api/messages/markdisplayed" + id); 
    console.log("Marking displayed"); 
} 

我只需要它暂停所以之前的帖子被发送回服务器

我几乎可以肯定的setTimeout是不是我想要的延迟,但我不知道该用什么其他

+0

['setTimeout(callback,delay)'](https://developer.mozilla.org/en/DOM/window.setTimeout)将等待给定时间'delay',然后执行'callback'。它不会延迟当前的脚本,而是会为事件循环的队列添加'callback'(或类似的东西)。 – Zeta 2012-07-30 16:03:21

回答

5

更改markDisplayed到:

function markDisplayed(id) { 
    setTimeout(function() { 
     $.post("/api/messages/markdisplayed" + id); 
     console.log("Marking displayed"); 
    }, 5000); 
}​ 

这将导致函数中执行它之前的内容等5秒钟。

+2

您应该将'setTimeout(MessagesAjax,5000)'从MessageAjax函数移动到markDisplayed超时。否则,我相信你会很快建立一个请求队列。 – 2012-07-30 16:03:43

0

function markDisplayed(id) { 
    setTimeout(function(){ 
     $.post("/api/messages/markdisplayed" + id); 
     console.log("Marking displayed"); 
     },5000);    //want it to pause here 
} 

更换

function markDisplayed(id) { 
    setTimeout(5000);    //want it to pause here 
    $.post("/api/messages/markdisplayed" + id); 
    console.log("Marking displayed"); 
} 

可以为你工作。