gpt4 book ai didi

javascript - 无法从 Mongoose then 语句插入数组

转载 作者:可可西里 更新时间:2023-11-01 10:41:07 26 4
gpt4 key购买 nike

背景:A Market集合有一个 url存储来自所选 sites 的 url 数组的属性来自 Site收藏。我创建了一个助手(下面的代码),我可以从 /routes/markets.js 调用它这基本上选择了 Market基于 req.params.url然后遍历 market.sites数组并找到对应的Site ,将它们存储到一个数组中,我可以在呈现 View 时使用该数组。

问题:调用 push数组上的函数实际上并没有推送任何东西,在最后一个 console.log声明我只是记录[]

问题:我怎样才能压入这个数组?这是 for of 的问题吗?循环和 then Promise打电话?

ma​​rket-helpers.js

exports.listSites = (req, res, errorRender, successRender) => {
let sites = [];
Market.find({url: req.params.url})
.then((market) => {
for (url of market[0].sites)
Site.find({url}).then((site) => {
sites.push(site[0]);
}).catch((err) => console.log(err));

console.log(sites);
res.render(successRender, {sites});
})
.catch((errors) => {
res.render(errorRender, {errors});
});
};

routes/markets.js

router.get('/:url', (req, res) => {
Markets.listSites(req, res, 'login-markets', 'markets/index');
});

最佳答案

Site.find({url}) 是一个异步操作,因此 res.send 在等待异步操作结果之前执行。您可以使用 Promise.all 等待所有异步操作的结果,一旦所有操作都已解决,您可以返回如下响应:

exports.listSites = (req, res, errorRender, successRender) => {
let sites = [];
Market.find({url: req.params.url})
.then((market) => {
const promises = [];
for (url of market[0].sites)
promises.push(Site.find({url}).then((site) => sites.push(site[0])));

return Promise.all(promises).then(() => {
console.log(sites);
res.render(successRender, {sites});
});
})
.catch((errors) => {
res.render(errorRender, {errors});
});
};

关于javascript - 无法从 Mongoose then 语句插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42474207/

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