我正在尝试通过使用NodeJS进行一些基本的网络抓取来构建具有各种键值的对象数组。对于我的代码库的下一步,我需要访问父函数之外的“构建”数组,您将看到:
rp.post(login)
请注意,我使用express、request-promise 和 Cheerio作为我的主要 npm 依赖项。
let orderArray = []; // Create Empty Array
// Login
rp.post(login, function(err, res, body) {
// Set Cookie Jar
cookieJar = res.headers['set-cookie'];
// Get Order Numbers
rp(getOpenOrders).then(function ($) {
// Check Amount of Open Orders
let openOrderTableLength = $('tbody tr').length;
// Build Out Information
for (let i = 0; i < openOrderTableLength; i++) {
let order = {
vendor: "example vendor",
vendorNum: $('a.show-progress-on-click').eq(i).text(),
vendorNumLink: "https://www.vendor.com." + $('a.show-progress-on-click').eq(i).attr('href'),
status: $('td.w200:nth-of-type(5)').eq(i).text(),
dates: {
ordered: $('td.w100:nth-of-type(3)').eq(i).text(),
eta: "TBA",
shipped: "TBA",
arrived: "TBA",
},
courier: "TBA",
trackingNum: "TBA",
dropShip: false,
items: []
}
if (order.status === "Backorder") {
// Get details from specific
rp({
uri: order.vendorNumLink,
cookie: cookieJar,
transform: body => cheerio.load(body)
})
.then(function ($) {
// Get length of items within
let backOrderItemsTableLength = $('tbody tr').length;
// Build out all the items
for (let j = 0; j < backOrderItemsTableLength; j++) {
let orderItem = {
sku : "TBA",
description: "TBA",
orderQty: "TBA",
allocQty: "TBA",
bOrderQty: "TBA",
eta: $('td:nth-of-type(6)').eq(j).text(),
unitCost: "TBA",
subTotal: "TBA",
}
order.items.push(orderItem);
}
orderArray.push(order);
console.log(orderArray) // Displays a filled array
})
}
}
})
});
console.log(orderArray) // Returns an empty array
正如您将在这段代码的最后一部分中看到的那样,我已经标记了数组的工作位置以及我需要在父函数之外访问它的位置。
orderArray.push(order);
console.log(orderArray) // Displays a filled array
})
}
}
})
});
console.log(orderArray) // Returns an empty
我要求指针访问内置函数之外的“Built”数组,除此之外,有人可以在适当的时间提供一些信息来完成返回,回调()或返回回调(),我假设会解决我的问题在这里?
提前谢谢了!