Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

javascript - Console log of array is empty

I have these two code examples:

no1

const r = new Array();

for (i = 0; i < 5; i++) {
  const vari = 'print';
  r.push(vari);
}

console.log(r);

console log of this is [ 'print', 'print', 'print', 'print', 'print' ]

no2(using cheerio for scraping)

const sqft = new Array();
      for (k = 0; k < links.length; k++) {
        request(`${links[k]}`, (error, response, html) => {
          const $ = cheerio.load(html);
          const pr = $('div[class="df2  "]').first().text();
          sqft.push(pr);
        });
      }
console.log(sqft);

Links are pushed in request before this. Now when I console.log(sqft) I get []. If I console.log it inside for loop it will show data. Is it the difference between no1 and no2 or cheerio is making a problem? Thanks!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It looks like you have asynchronous operation. So we need to use async and await keywords to make execution synchronous:

async function yourFunction() {
    const sqft = new Array();
    for (k = 0; k < links.length; k++) {
        // here we are waiting for the promise to be resolved
        let res = await request();
        const $ = cheerio.load(res.html);
        const pr = $('div[class="df2  "]').first().text();
        sqft.push(pr);
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...