0

我实际上正在使用 mongodb 和 nodejs 开发一个小应用程序来创建我的 REST Api。当我需要访问对象引用时遇到问题:

  • 我有一个参考用户对象的路线图集合
  • 当我想获取所有路线图时,我必须循环我的路线图数组以延迟加载我的用户,通过存储在路线图集合中的 ref ID
  • 我有回调问题,需要的时候用户没有加载

我找到了使用 Wait.for 库的解决方案:https ://github.com/luciotato/waitfor ,但我不知道它是如何工作的。我尝试了一切,但没有办法让它工作

all: (req,res)->
    @em.collection(@collection).find().toArray((err, result)=>
      roadmaps = []
      for r in result
        r.user = @getUser(r.user.oid)
        roadmaps.push r
      res.send(roadmaps))



 getUser: (oid)->
    @em.collection('user').findOne {_id: new @objectId(oid)}, (err, res)=>
      if !err
        return res
      return undefined

有人知道如何使它正常工作吗?我应该把 wait.lauchFiber 放在哪里?我应该把 wait.for 放在哪里?

谢谢大家

4

1 回答 1

0

我不熟悉 CoffeeScript,请纠正我,我会编辑这个答案。

all: (req,res)->
    var result = wait.forMethod(@em.collection(@collection).find(), "toArray")
    roadmaps = []
    for r in result
        r.user = @getUser(r.user.oid)
        roadmaps.push r
    res.send(roadmaps)



 getUser: (oid)->
    try
      return wait.forMethod(@em.collection('user'),"findOne",{_id:new @objectId(oid)})
    catch(err)
      return undefined

如您所见,对于“getUser”,如果方法如此简单,则最好使用带有回调的版本。

“把launchFiber()放在哪里?”

您在请求到达时放置了launchFiber。见https://github.com/luciotato/waitfor#proper-use

于 2014-08-26T12:22:00.400 回答