2012-07-30 49 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"); 
} 

可以爲你工作。