2017-09-25 12 views
0

ボタンをクリックしてデータを取得した後に遅延を追加したいと思います。 スクリプトはブラウザコンソール内で実行されます。クリック後にjs関数を遅らせる方法

$(pages())ページングボタンを取得します。

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 'setTimeout'の中括弧の中に' p ... 'があります。そうすれば、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をミリ秒単位で待機させる時間に変更します。あなたがsetTimeoutメソッド内callNodes.map()...を置きたいと思うようなあなたの場合には

、それが見えます:

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

関連する問題