Паршу сайт, есть функция. Как мне вернуть из этой функции значение? Как я понимаю нужно сделать после each then, который будет возвращать resolve, но я получал ошибку TypeError: $(...).each(...).then is not a function, когда пытался так сделать
function parse(body) {
return new Promise(function(resolve, reject) {
var $ = cheerio.load(body)
$('span').each(function(i, elem) {
axios.get(url)
.then(function(response) {
// действия с полученным html
})
.then(function(mark) {
// еще действия
})
}).then(function(data)
return resolve(data)
})
})
}
У вас сейчас какая ситуация: вы проходите по всем элементам, запускаете какой-то сетевой запрос и все.
Во первых, вы ничего никуда не возвращаете, во вторых $.each вернет объект, где нет метода then.
Jquery (cheerio) давно не пользовался, поэтому будет смешанный ответ.
function parse(body) {
const $ = cheerio.load(body);
// В promises массив ожиданий
const promises = $('span').map((i, elem) => {
return axios.get(url)
.then(function(response) {
// действия с полученным html
})
.then(function(mark) {
// еще действия
// тут надо что-то будет вернуть
});
});
// Дождется, когда все ожидания выполнятся
return Promise.all(promises);
}
Promise.all
Продвижение своими сайтами как стратегия роста и независимости