gpt4 book ai didi

javascript - 如何访问从 Promise.all() 返回的 key

转载 作者:行者123 更新时间:2023-12-04 22:39:07 24 4
gpt4 key购买 nike

如何访问从 Promise.all() 返回的对象中的项目。

我想遍历整个数组并获取每个 promise 返回的标题,但我无法访问 Promise {} 以及其中的任何对象。

[
Promise {
{
_id: 5e09e4e0fcda6f268cefef3f,
title: 'dfgfdgd',
shortDescription: 'gfdgdfg'
},
qty: 1
},
Promise {
{
_id: 5e09e507fcda6f268cefef40,
title: 'Test product',
shortDescription: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the '
},
qty: 1
},
Promise {
{
_id: 5e09e507fcda6f268cefef40,
title: 'Test product',
shortDescription: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the '
},
qty: 3
}
]

编辑

这是创建promise数组的代码

const userId = req.user._id;
try {
const user = await User.findById(userId);
const { inCart } = user;
const results = [];
for (let i = 0; i < inCart.length; i += 1) {
results.push(Product.findById(inCart[i].itemId, 'title shortDescription').exec());
}
await Promise.all(results);
for (let i = 0; i < results.length; i += 1) {
results[i].qty = inCart[i].qty;
}
return res.render('shop/cart', { items: results });
} catch (error) {
console.log(error)
}

最佳答案

我猜 Promise.all 没有机会找出哪个已经调用了里面的 resolve 函数。

来自 Promise.all()文件指出:

The Promise.all() method returns a single Promise that fulfills when all of the promises passed as an iterable have been fulfilled or when the iterable contains no promises. It rejects with the reason of the first promise that rejects.

在我的示例中,我使用更简单的对象(例如 { title: 'first' })创建了 Promise 元素,以便更好地表示。

为了实现您的目标您的要求是什么,您需要处理每个 Promise 已解决的状态,例如在 forEach 中,就像在我的解决方案而不是使用 Promise.all()。通过在每次迭代中使用 then,您可以访问已解析的对象的属性。

相反,您可以这样做 - 显然您需要应用到您的结构:

const promises = [
new Promise(resolve => {
setTimeout(() => {
resolve({ title: 'first' })
}, 1200)
}),
new Promise(resolve => {
setTimeout(() => {
resolve({ title: 'second' })
}, 800)
}),
new Promise(resolve => {
setTimeout(() => {
resolve({ title: 'third' })
}, 2400)
}),
new Promise(resolve => {
setTimeout(() => {
resolve({ title: 'fourth' })
}, 3200)
}),
];

Promise.all(promises).then(() => console.log('all finished'));

promises.forEach(p => p.then(d => console.log(`${d.title} finished`)));

我希望澄清和帮助!

关于javascript - 如何访问从 Promise.all() 返回的 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59563390/

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