Как получить возврат функции с помощью методов async / await - PullRequest
0 голосов
/ 24 апреля 2019

Я использую cheerio, чтобы очистить объявления о работе от действительно (по крайней мере, 50 сообщений о работе).

Я уже получил очищенные данные с помощью cheerio. Но я не знаю, как хранить эти данные в объекте с помощью метода async / await

инструменты: node.js, cheerio, запрос.

const cheerio = require('cheerio');
const request = require('request');

const fetchIndeedData = async () => {
    let start = 0;
    let title = [];
    let company = [];
    let location = [];
    let summary = [];

    for (let i = 0; i < 5; i++) {
        let url = `https://ca.indeed.com/jobs?q=full+stack+developer&l=Toronto,+ON&start=${start}`;
        await request(url, (err, response, body) => {
            const $ = cheerio.load(body);

            $('#resultsCol .jobsearch-SerpJobCard .title a').each((i, item) => {
                title.push(item.attribs.title);
            });

            $('#resultsCol .jobsearch-SerpJobCard .company a').each((i, item) => {
                company.push($(item).text().trim());
            });

            $('#resultsCol .jobsearch-SerpJobCard .location').each((i, item) => {
                location.push($(item).text());
            });

            $('#resultsCol .jobsearch-SerpJobCard .summary ').each((i, item) => {
                summary.push($(item).text());
            });

        });
        start += 10;
    }

    const jobPostings = {
        title,
        location,
        company,
        summary
    };

    return jobPostings;
};

const getData = fetchIndeedData().then(data => console.log(data));

Я не могу получить данные, когда вызываю функцию getData. И когда я запускал console.log (jobPostings) перед возвратом. Я до сих пор не могу получить данные .... У кого-нибудь есть идеи?

1 Ответ

2 голосов
/ 24 апреля 2019

Вот как я думаю, это может выглядеть с async / await ( вам понадобится запрос-обещание или аналогичный ):

const fetchIndeedData = async () => {
  let urls = [0,1,2,3,4].map(start => `https://ca.indeed.com/jobs?q=full+stack+developer&l=Toronto,+ON&start=${start}`)
  let responses = await Promise.all(urls.map(url => request.get(url)))
  let $$ = responses.map(response => cheerio.load(response))
  return $$.map($ => {
    return {
      title: $('title').text(),
      // more cheerio code here
    }
  })
}

;(async function(){
  const data = await fetchIndeedData()
  console.log(data)
})()
...