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

标签 node.js express promise

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

相关文章:

node.js - 客户端未握手客户端应重新连接,socket.io 在集群中

node.js - 如何在数组中查找数组的大小?

node.js - 使用异步和等待函数更新对象并推送到数组?

javascript - 访问 Promise 链中的外部变量

javascript - AngularJS:如何获取 $http 结果作为函数的返回值?

node.js - LocalStorage 作为请求

javascript - Go 与 JavaScript JSON 解析

node.js - 使用 express.js 和 TypeScript 的 Node Js 路由

node.js - 如何在同一端口上运行express和geddy应用程序?

javascript - 使用 promise 收集未知大小的分页数据