同步轮询URL

时间:2019-06-20 02:35:57

标签: javascript node.js npm-request

我正在寻找一个可以同步轮询某个URL的函数(即发送一个请求,等待它回来再发送另一个)。但是,我不确定为什么这行不通。

const request = require('request')

let count = 0;

function test() {
    setInterval(() => {
        console.log(count)
        request({uri: "https://google.com"}, (err, resp, body) => {
            console.log(count)
            count++;
        })
      }, 100);
}

我会等待它按顺序打印count1 2 3 4 5 ...),但是当前它多次打印相同的数字,表明这不是我想要的行为。

如何在执行另一个间隔之前让它等待回调?

2 个答案:

答案 0 :(得分:2)

您正在做的是每100毫秒发送一次请求,代码中没有任何内容等待响应。为此,您要删除$text='/<\s*div style="width:100%;overflow:hidden;"[^>]*>(.*?)<\/div[^>]>| <td align="right">(.+?)<\/td>/m'; preg_match_all($text, $html, $matches, PREG_SET_ORDER, 0); print_r($matches); ,然后在回调中再次调用该函数。

setInterval

答案 1 :(得分:0)

setInterval不适合诺言,因为它会多次触发回调,而诺言只能解析一次。

您可以尝试

var wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

test = async ()=> {
  while (true) {
    await request({ uri: "https://google.com" }, (err, resp, body) => {
        count++;   
    })
    await wait(1000);
    if(count == 100)
        break;
    console.log(count)
 }
}
test();