Если вы вернете обещание от getValues()
, то вы можете использовать async/await
с этим в вашем for
l oop, чтобы приостановить l oop для каждого вызова getValues()
и упорядочить их, чтобы один за другим, а не все, работающие одновременно:
const rp = require('request-promise');
const cheerio = require('cheerio');
function getValues(res, url_, allUrls_) {
let options = {
uri: url_,
transform: function (body) {
return cheerio.load(body);
}
};
console.log('inside getValues');
return rp(options).then(function($) { // return promise here
console.log('inside getValues function request');
cheerio here $ ('. some-selector'). map (function (i, links) {// мой пользовательский код}) вернуть что-то; // предположительно вернуть что-то здесь}); }
async function process() {
try {
for (let i = 0; i < len; ++i) {
var url_ = "https://www.someurl****.com" + allUrls_ + urlLastParam + (i + 1).toString();
console.log(allUrls_);
console.log('getValues URL: ' + url_);
let value = await getValues(res, url_, allUrls_); // await here
} catch(e) {
console.log(e);
// handle any error that occurred in getValues()
}
}
}
К вашему сведению, $('.some-selector')
не будет работать так, как вы это сделали в этом коде. $
был вашим HTML. Вы должны сначала загрузить контент html в cheerio, прежде чем вы сможете это сделать (что я добавил к своему ответу).