2017-09-25 71 views
0

我想在單擊按鈕以獲取一些數據後添加延遲。 腳本在瀏覽器控制檯內運行。如何在點擊按鈕後延遲js功能

$(pages())get's the pagination buttons。

let calls = []; 
    for (let i = 1; i <= callPagesCount; i++) { 
    $(pages()).find('a')[i].click() 

    setTimeout(() => {}, 200) 

    // Call the below, 200 ms later 
    callsNode().map((i, el) => { 
     calls.push({ 
     call_condition: $(el).find('div > span').text().trim(), 
     date: $(el).find('div').text().trim().match(/\[(.+)\]/i), 
     }) 
    }) 
    } 
+1

我認爲你只是想把這個'callsNode().ma p ...'在'setTimeout'的花括號內。這樣它將在200ms後執行。 – nicovank

+0

你的意思是,點擊按鈕,它會在服務器上執行一些事情,然後在一段時間後在瀏覽器中顯示返回數據?否則等待和不等待有什麼區別? – forqzy

回答

1

您可以使用$.map().delay().queue().promise()

$(() => { 
 
    $("a").on("click", e => { 
 
    e.preventDefault(); 
 
    console.log("clicked") 
 
    }); 
 

 
    $({}).queue("pages" 
 
    , $.map($("a") /* Array.from({length:callPagesCount}, (_, i) => i + 1) */ 
 
    , (el, i) => 
 
    (next) => { 
 
     el.click(); 
 
     /* 
 
     $(pages()).find('a')[i].click() 
 
     */ 
 
     $({}).delay(1000 /* 200 */ , "delay") 
 
     .queue(_next => { 
 
      /* 
 
      callsNode().map((i, el) => { 
 
      calls.push({ 
 
       call_condition: $(el).find('div > span').text().trim(), 
 
       date: $(el).find('div').text().trim().match(/\[(.+)\]/i), 
 
      }) 
 
      }) 
 
      */ 
 
      _next(); 
 
     }).dequeue("delay") 
 
     .promise("delay").then(next) 
 
    } 
 
)).dequeue("pages"); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
 
</script> 
 
<a href="">a</a> 
 
<a href="">b</a>

0

延遲JavaScript的簡單方法是使用setTimeout函數。

setTimeout((() => { 
    // do something after a delay 
}), 200); 

200更改爲您要等待的時間(以毫秒爲單位)。

在你的情況下,它看起來像你想放callNodes.map()...的setTimeout的內部:

let calls = []; 
    for (let i = 1; i <= callPagesCount; i++) { 
    $(pages()).find('a')[i].click() 

    setTimeout((() => { 
     // Call the below, 200 ms later 
     callsNode().map((i, el) => { 
      calls.push({ 
      call_condition: $(el).find('div > span').text().trim(), 
      date: $(el).find('div').text().trim().match(/\[(.+)\]/i), 
      }) 
     }) 
    }), 200); 


    } 
+0

是的,但setTimeout保持它自己的上下文,如何推動*調用數組* *? – TaoJS

+0

我不認爲我理解 - 你仍然在推動'calls'數組。 – Will