我正在寻找一个可以同步轮询某个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);
}
我会等待它按顺序打印count
(1 2 3 4 5 ...
),但是当前它多次打印相同的数字,表明这不是我想要的行为。
如何在执行另一个间隔之前让它等待回调?
答案 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();