减少返回空数组

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)

【讨论】:

返回未定义 再试一次我更新我的答案

以上是关于减少返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 返回空数组

awesome-typescript-loader:空数组的传播返回空数组

Absinthe 返回一个包含一个空值的数组,而不是一个空数组

返回一个空的二维数组

为啥facebook相册返回一个空数组?

[UIScreen 屏幕] 啥时候返回一个空数组