javascript - 如何从 Promise 中的函数返回新的 json

标签 javascript node.js mongoose coffeescript promise

我有一个 Mongoose 查询,可以找到一堆 field ,然后进行谷歌查询来查找到这些 field 的驾驶距离。 google 函数位于 Promise 中,在 .then 中我必须执行 res.jsonvenues.emissed.fulfill[0] ,否则 json 会被包裹起来

  "emitter": {
    "domain": null,
    "_events": {
      "reject": [
        null,
        null
      ]
    },
    "_eventsCount": 2
  },
  "emitted": {
    "fulfill": [
      [... 
    ]
   ]

    ]
  },
  "ended": true
}

有什么方法可以避免从 promise 中返回所有内容,以便我可以只执行 res.json 或者这是解决此问题的最佳方法?

这是相关代码(coffeescript):

Venue.find {}
  .lean()
  .then (dbResponse) ->
    venues = dbResponse
    if req.param('hotelId')
      hotelId = req.param('hotelId')
      distancePromise = ()->
        venues = findDistances(hotelId, venues, req)
      Promise.resolve distancePromise()
      .then ()->
        res.json venues.emitted.fulfill[0]
    else
      res.json venues
  .catch (err) ->
    res.status(400).send(err)

最佳答案

当您调用返回 Promise 的函数时,您应该获取 Promise 返回的值,然后发送该值。

Venue.find {}
  .lean()
  .then (dbResponse) ->
    venues = dbResponse
    if req.param('hotelId')
      hotelId = req.param('hotelId')          
      findDistances(hotelId, venues, req)
      .then (result)->
        res.json result
      .catch (error) ->
        res.status(404).send(err)
    else
      res.json venues
  .catch (err) ->
    res.status(400).send(err)

关于javascript - 如何从 Promise 中的函数返回新的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620934/

相关文章:

node.js - $inc 忽略 Mongoose

javascript - 如何计算给定日期是今天还是昨天?

javascript - Vuex mapAction 的“未知操作类型”

node.js - npm install firebase 失败

node.js - 将受密码保护的私钥与 crypto.createSign 一起使用

node.js - 确定 npm 将为给定版本范围选择哪个版本的包

node.js - 在 mongoDB 上搜索子字段

node.js - 从单个 Node.js 应用程序打开多个 Mongo 连接是个好主意吗?

javascript - 使用 json 的 d3.js 中的不完整图表

java - 在 GWT 中将 JavaScriptObject 转换为 Java 对象失败