我正在使用Request-Promise和cheerio来抓取一些网站数据,基本上我正在尝试实现以下目标:
- 创建一个空数组
- 登录
- 从一页获取一些信息并将对象推送到数组中
- 从另一个页面获取一些信息并将对象推送到数组中
- 对于数组中的每个 now 对象,我需要:
- 转到存储在该对象中的 URL {link: "some url", items: []}
- 遍历该链接中找到的所有项目,并将其推送到迭代对象中的项目数组,如下所示:{link: "some url", items: [{item},{item}]}。
- 访问完成的orderArray,它应该会输出如下内容:
{link: "some url", items: [{item},{item}]}, {link: "some url", items: [{item},{item}]}, {link: "some url", items: [{item},{item}]}
第 6 步是我遇到问题的地方,我不知道如何做到这一点,而不根据我的代码将 promise 嵌套在 for 循环中,然后开始变得讨厌。我可以在这里指出正确的方向吗?
这是我当前的代码:
let orderArray = []; rp.post(login) .then(function(res1){ // Login & Set Cookies cookieJar = res1.headers['set-cookie']; return rp(getOpenOrders); }) .then(function($){ // Get Some Info from getOpenOrders orderArray.push({info}); return rp(getShippedOrders); }) .then(function($){ // Get Some Info from getShippedOrders orderArray.push({info}); return orderArray; }) .then(function($){ // Loop through each object in the orderArray for (i = 0,; i < orderArray.length; i++){ rp(orderArray[I].link) .then(function($){ //Get length of items on page let itemsOnPage = $('tbody tr').length; //Get some more details for each object for (j = 0,; j < items.length; j++) { let moreinfo = {…}; orderArray.items.push(moreinfo); } } } return orderArray; }) .then(function($){ // Log finished Array console.log(orderArray); }) .catch(function(err){ console.log(err); }) };