【发布时间】:2019-05-03 12:09:27
【问题描述】:
我的异步函数中有以下代码
async function test () {
try {
const aucs = await auctions.find({owner: 'owner', place: 'place'}).limit(15);
const item = await Promise.all(aucs.map(async aucs => {
const map = await items.find({id: aucs.item});
return map[0]
}));
--->we are here [1]
} catch (err) {
console.log(err);
}
}
test();
还有点 [1] 我有两个可用的数组,其中包含另一个对象(都是来自 Mongo 的响应),它们是:
aucs = [ { _id: 5c00faa4936359120ceb3632,
auc: 177215422,
item: 130251,
price: 26000000,
lastModified: 1543567955000,
date: 2018-11-30T08:53:56.290Z,
__v: 0 },
{ _id: 5c00faa4936359120ceb363f,
auc: 177215440,
item: 130251,
price: 26000000,
lastModified: 1543567955000,
date: 2018-11-30T08:53:56.290Z,
__v: 0 },... ]
和
item = [ { _id: 5bcd8a6134cdd1223cd3239b,
id: 130251,
name: 'TEST_NAME_1',
__v: 0 },
{ _id: 5bcd8a6134cdd1223cd3239b,
id: 130252,
name: 'TEST_NAME_2',
__v: 0 },...]
我想添加到 aucs[i]aucs 中的每个元素,item[i].name (name: 'TEST_NAME_1')
喜欢:
combined = [ { _id: 5c00faa4936359120ceb3632,
auc: 177215422,
item: 130251,
name: 'TEST_NAME_1',
price: 26000000,
lastModified: 1543567955000,
date: 2018-11-30T08:53:56.290Z,
__v: 0 },...]
我正在尝试将for 循环与auc[i].name = item[i].name 一起使用或使用aucs.push(),但由于某些未知原因,它对我不起作用。
我收到.push is not a function 的错误,而 for 循环没有添加任何内容。那么也许有人有任何想法?
注意:1
实际上解决了 item 的一个问题,mongo 在数组内返回数组,如[ [ { ...} ] ],所以我应该使用 return map[0] 来修复它。
注意:2
根据 typeof,aucs 和 item 都是对象,并且有 .length 选项(它们的长度相同,应该一直都是。所以它们不是承诺
注意:3
let merged = {...aucs, ...item};回复我
{ '0': { _id: 5bcd8a6134cdd1223cd3239b,
id: 130251,
name: 'JewelCraft',
icon: 'inv_jewelcrafting_70_jeweltoy',
stackable: 1,
isAuctionable: true,
__v: 0 }...
但不是我需要的
【问题讨论】:
-
我建议不要在 cmets 中添加信息,而是更新问题本身(使用“编辑”)。
标签: javascript arrays mongodb mongoose ecmascript-6