Всем привет.
сейчас разбираюсь с промисами.
Почему тип результата object ? ( result )
как преобразовать его в array и сделать flat() ?
мне нужно соединить распаршеные страницы в один массив.
const fs = require('fs');
const axios = require('axios')
const cheerio = require('cheerio')
let now = Math.floor(new Date());
let scan = new Promise( (resolve,reject)=>{
const parsedUrl = 'https://tehnoskarb.ua/veb-kamery/c242?page=';
axios.get(parsedUrl+1)
.then(res=>{
let $ = cheerio.load(res.data)
return parseInt($('span.cur_page>span').text().match(/\d/)[0]); // max page
})
.then(pages=>{
let promises = []
for(var i=0;i<pages;i++){
promises.push(axios.get(parsedUrl+i))
}
Promise.all(promises).then(pages=>{ // parse each page
return pages.map(page=>{
let $ = cheerio.load(page.data);
return $('div.products>ul>li').map( (i,el)=>{
let title = $(el).children('h4').children('a').attr('title');
let link = $(el).children('h4').children('a').attr('href');
let count = $(el).children('p').text().toString();
if(title && link && count){
return {title,link,count:parseInt(count.match(/\d/)[0])}
}
}).toArray()
})
})
.then(items=>resolve(items))
})
});
scan.then(results=>{
console.log("LEN: ",results.length)
console.log("TYPE: ",typeof results) // object <--------------------
console.log( `TIME: ${Math.floor(new Date()) - now} ms`)
console.log("DATA: ",results)
})