减少返回空数组
Posted
技术标签:
【中文标题】减少返回空数组【英文标题】:Reduce return empty array 【发布时间】:2021-12-19 08:38:00 【问题描述】:activeUsers - 猫鼬对象数组
activeUsers.campaings - 猫鼬对象数组
LandingsFromBinom - 存储 id [id: 123, name: name, id: 133, name: name2]
的对象数组
对于每个用户,我都有活动数组(mongoose doc),对于每个活动,我都有 langings 数组(mongoose doc)。
我从 db 中获取所有用户并开始为每个用户进行迭代。 对于每个广告系列,我都会获取“着陆”并开始为每个广告系列进行迭代。
查看 db 并比较我需要更改的 id 并将其值存储在“landingsIds”中
问题:当我控制台日志“数据”返回我空数组,但如果我 console.log 函数返回填充数组。如何解决?
// Fetch users from db
let activeUsers = await User.find().populate(
path: 'campaigns',
match: active: true ,
)
const data = activeUsers.reduce((results, user) =>
// For each campaign get landings
user.campaigns.forEach(async (campaign) =>
const landings = await campaign.populate(
path: 'landings',
match: active: true ,
)
// Get only good ID
const landingsIds = landings.reduce((results, landing) =>
landingsFromBinom.forEach((binomLanding) =>
if (
parseInt(binomLanding.id) === landing.id &&
binomLanding.inject >= landing.todayVisitors
)
results.push(landing.id)
)
return results
, [])
results.push(
landings: landingsIds,
user: user._id
)
// RETURN Filled array
console.log(results)
)
return results
, [])
// Return empty array
console.log(data)
输出:
[]
[
landings: [ 3, 11, 1, 7 ],
user: new ObjectId("617fb23b1e7ea187ae07a6ee")
]
【问题讨论】:
【参考方案1】:在 array.reduce
中使用 await 和 Promise.resolve
let activeUsers = await User.find().populate(
path: 'campaigns',
match: active: true ,
)
const data = await activeUsers.reduce(async (results, user) =>
// For each campaign get landings
user.campaigns.forEach(async (campaign) =>
const landings = await campaign.populate(
path: 'landings',
match: active: true ,
)
// Get only good ID
const landingsIds = landings.reduce((results, landing) =>
landingsFromBinom.forEach((binomLanding) =>
if (
parseInt(binomLanding.id) === landing.id &&
binomLanding.inject >= landing.todayVisitors
)
results.push(landing.id)
)
return results
, [])
results.push(
landings: landingsIds,
user: user._id
)
// RETURN Filled array
console.log(results)
)
, [], Promise.resolve(results))
console.log(data)
【讨论】:
返回未定义 再试一次我更新我的答案以上是关于减少返回空数组的主要内容,如果未能解决你的问题,请参考以下文章
awesome-typescript-loader:空数组的传播返回空数组