gpt4 book ai didi

node.js - 如何在异步函数中将对象插入数组

转载 作者:行者123 更新时间:2023-12-04 14:19:18 24 4
gpt4 key购买 nike

我一直在尝试在异步函数中将一个对象插入到数组中,但是它返回一个空数组作为 nodejs 中的输出,mongoose

var data = [];

app.get("/api/post", async (req, res) => {
const post = await UserPost.find();

post.forEach(async element => {
const email = await element.userid;
const user = await Account.find({ email });
const usern = await user[0].username;

var userobject = {
element,
usern
};
//Promise.all(userobject)
data.push(userobject);
});

console.log(data);

res.send({ data });
});

最佳答案

看来您正在为 promise 而苦苦挣扎。为了实现这个特定的场景,你可以使用Promise.allArray.map

这是我为您编辑的代码:

(*请注意,这只是为了便于解释而使用的伪代码)

app.get("/api/post", async (req, res) => {
try {
const posts = await dummyPromiseResolver(); // first promise

const promises = posts.map(async element => {
const user = await dummyEmailReturn(element.userid); // second promise
const usern = user[0].username;
return {
usern,
...element
};
});

const fresult = await Promise.all(promises);
res.send(fresult);
} catch (error) {
console.error("error in posts fetch:" + error);
}
});

如果我描述这段代码,posts.map 正在创建一个 promise 数组,因为我们需要遍历数组中的每个对象并需要从单独的 promise 中添加值。

然后 Promise.all 可以执行您的 promise 数组并返回包含您想要的结果的最终结果数组。

注意:您也可以使用for … of,但是当我们需要并行发生事情时,我们使用Promise.all。您可以从这个 thread 中找到更多信息.

这里是代码沙箱的链接:https://codesandbox.io/embed/serverless-cookies-nu4h0

请注意,我添加了 dummyPromiseResolverdummyEmailReturn,它们等同于 UserPost.find()Account.find () 分别起作用。除此之外,我在您的代码中删除了一些不必要的等待。我添加了一个 try catch block 来捕获任何异常。您可以根据需要更改 try catch。

希望对您有所帮助。如果您需要更多说明,请告诉我。

关于node.js - 如何在异步函数中将对象插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56722040/

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