我正在尝试学习使用 promise。
在这种情况下,我想制作一个网络 scraper 。我正在使用 request-promise
在此代码中。
实际上 scraper 工作正常。我误解了如何使用 then()
中的返回值.我也用谷歌搜索了它,但没有运气,仍然卡住了。这是我的代码。
let categories = scraper.getCategories(promoUrl);
categories.then(function (val) {
let promoPerCategory = [];
for (let i = 0, len = val.length; i < len; i++) {
let json = {
category: val[i].category,
url: val[i].url,
promo: []
}
scraper.getPromoPerCategories(val[i].url)
.then(function (allPromo) {
for (let j = 0, lenResult = allPromo.length; j < lenResult; j++) {
json.promo.push({
imageUrl: allPromo[j].imageUrl,
merchantName: allPromo[j].merchantName,
promoTitle: allPromo[j].promoTitle,
validUntil: allPromo[j].validUntil,
promoUrl: allPromo[j].promoUrl
});
console.log(json.promo[j]);
}
})
promoPerCategory.push(json);
}
result.send({ "promoPerCategory": promoPerCategory });
})
then()
内部函数 getPromoPerCategories
工作正常,我使用 console.log(json.promo[j])
打印出值
但问题是我想把数组从json.promo[j]
进入数组 promoPerCategory
这样我就可以使用 result.send({ "promoPerCategory": promoPerCategory })
归还它
你能帮我做正确的事吗?任何帮助将不胜感激。
现在的结果是这样的
{"promoPerCategory": [{"category":"Fashion","url":"https://","promo":[]}
对象 promo
是空数组
最佳答案
您的第一个问题是 result.send
没有等待 getPromoPerCategories
结果。要做到这一点,result.send
需要在 getPromoPerCategories
promise 的回调中。看起来您想在调用 result.send
之前等待所有结果返回,因此您应该使用 Promise.all
并等待所有 code>getPromoPerCategories
promise 。例如:
categories.then(function (val) {
let promoPerCategory = [],
promoPerCategoryPromises = [];
for (let i = 0, len = val.length; i < len; i++) {
let json = {
category: val[i].category,
url: val[i].url,
promo: []
}
var promise = scrapper.getPromoPerCategories(val[i].url)
.then(function (allPromo) {
for (let j = 0, lenResult = allPromo.length; j < lenResult; j++) {
json.promo.push({
imageUrl: allPromo[j].imageUrl,
merchantName: allPromo[j].merchantName,
promoTitle: allPromo[j].promoTitle,
validUntil: allPromo[j].validUntil,
promoUrl: allPromo[j].promoUrl
});
console.log(json.promo[j]);
}
promoPerCategory.push(json);
});
promoPerCategoryPromises.push(promise);
}
Promise.all(promoPerCategoryPromises).then(function() {
result.send({ "promoPerCategory": promoPerCategory });
});
})
关于node.js - 如何访问 promise 中的值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40664260/