В настоящее время все запросы в основном выполняются параллельно.Прежде чем вы сможете добавить задержку между ними, вы должны выполнить их последовательно.Вы можете сделать это с помощью цепочки обещаний.Это легко сделать с помощью .reduce
:
const rp = require('request-promise');
const cheerio = require('cheerio');
[1, 2, 3].reduce((p, element) => {
url = `https://stackoverflow.com/q=${element}`
return p
.then(() => rp(url))
.then((html) => {
// Logic code
});
}, Promise.resolve())
Это создает цепочку, эквивалентную
rp(url1)
.then(html => ...)
.then(() => rp(url1))
.then(html => ...)
.then(() => rp(url2))
.then(html => ...)
Чтобы добавить задержку, мы определяем функцию, которая возвращает функцию, котораявозвращает обещание, которое разрешается через x миллисекунд через setTimeout
:
function wait(x) {
return () => new Promise(resolve => setTimeout(resolve, x));
}
Теперь мы можем добавить это в нашу цепочку (я заменяю rp
чем-то, что выполняется здесь):
function wait(x) {
return () => new Promise(resolve => setTimeout(resolve, x));
}
[1, 2, 3].reduce((p, element) => {
const url = `https://stackoverflow.com/q=${element}`
return p
.then(() => Promise.resolve(url))
.then((html) => {
console.log(`Fetched ${html}`);
})
.then(wait(2000));
}, Promise.resolve())