forEach 中的推送对象在地图外观结束时为空 [重复]

Posted

技术标签:

【中文标题】forEach 中的推送对象在地图外观结束时为空 [重复]【英文标题】:Pushed object in forEach is empty at the map look end [duplicate] 【发布时间】:2021-08-18 17:09:15 【问题描述】:

我希望从 forEarch 推送对象,在 forEarch 中获取数据后,console.log 会显示正确的值,并且对象已正确推送到数组。

但是在forEach的最后,如果我尝试访问推送的对象,数组里面没有对象

代码如下

async function get_line_items(items) 
              
            line_items2 = [];

            await items.forEach((element, index) => 

                const id = element.id;
            
                if (id) 

                    await getPriceFromCartCheckout(id, (err, results) => 
                        if (err) 
                            console.log(err);
                            return;
                        

                        if (results && !isEmpty(results)) 
                            // Add new item
                            line_items2.push(
                                name: element.name,
                                amount: results[0].price,
                                currency: "eur",
                                quantity: element.quantity,
                            )

                        
                        console.log(line_items2) // => Here objects are properly added to the array on each loop
                    );
                

            )
            console.log(line_items2) // => Here the array is empty.
            return line_items2;
          

          const line_items = await get_line_items(req.body[1].items);

          console.log( line_items); // => Here the array is empty.


module.exports = 
getPriceFromCartCheckout: async (id) => 

        return await pool.query(`SELECT volume, price FROM products WHERE id = ?`, [ 
            parseInt(id)
        ])
        .then(iuidtest => 
            return iuidtest;
        );
    ,
;

任何帮助将不胜感激:)

在这里找到解决方案:

NodeJS async mysql call to connection pool returns no result

【问题讨论】:

这不是“最后”。您无需等待 getProductIdWeight 回调。你应该让这个函数返回一个承诺,这样你就可以干净地等待它。 【参考方案1】:

您应该等待getProductIdWeightPrice 而不是循环本身。循环做了它应该做的事情——循环数组,调用一些外部方法。这些方法的作用 - 循环不在乎。

为了“暂停”循环,您需要等待异步调用以获取数据。这样做,它会工作:)

【讨论】:

我刚刚更新了代码以使用 async/await 和 getPriceFromCartCheckout 但现在它告诉我:await getProductIdWeightPrice(id, (err, results) => ^^^^^ SyntaxError: await is only valid在异步函数中 很好,但现在getPriceFromCartCheckout 正在等待查询。基本上该函数返回的是 db 查询的 result。这个结果不是 Promise(或异步函数调用)。您可以简单地执行以下操作:getPriceFromCartCheckout: async (id) => pool.query(`SELECT volume, price FROM products WHERE id = ?`, [ parseInt(id)]) 如果pool.query 返回一个 promise/async 函数,它将起作用。 我将其更新为:pastebin.com/7euj7jX1 但我仍然有同样的错误“等待仅在异步函数中有效” 你需要要么使用short return async (id) => pool.query(意味着这个函数将返回pool.query的调用),要么在函数体中显式返回:async (id) => return pool.query 。您现在执行一个函数,该函数调用 pool.query,但返回 void。

以上是关于forEach 中的推送对象在地图外观结束时为空 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

flask-sqlalchemy中的日期查询在相等时为空,在ge或le时为非空

Qml 上下文对象在应用程序关闭时为空

Request.UrlReferrer 在页面刷新时为空

保留原始对象以结束地图和过滤器链

从模板化控件中调用 ASP.net 页面对象时为空

AjaxOption 中的字符串参数在提交时为空,但在响应中显示