gpt4 book ai didi

node.js - 如何访问 promise 中的值(value)?

转载 作者:搜寻专家 更新时间:2023-10-31 23:41:04 24 4
gpt4 key购买 nike

我正在尝试学习使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com