如何从承诺中的函数 return new json
How to return new json from a function within a promise
我有一个 mongoose 查询,可以找到一堆场地,然后执行 google 查询来查找到这些场地的行驶距离。 google 函数在一个 promise 中,然后我必须做 res.json venues.emitted.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)
您的 distancePromise
函数不 return Promise 因此会立即解析。
findDistance
执行 return 一个 Promise,该 Promise 将结果作为第一个参数解析。
这就是您所看到的 "wrapping" 结果的属性。
只需使用
return findDistance()
.then(res.json)
返回该 Promise 将允许捕获最后一个函数的错误。
Venue.find {}
.lean()
.then (dbResponse) ->
venues = dbResponse
if req.param('hotelId')
hotelId = req.param('hotelId');
return findDistances(hotelId, venues, req)
.then (res.json)
else
return res.json venues
.catch (err) ->
res.status(400).send(err)
当您调用 returns 承诺的函数时,您应该获得承诺返回给您的值,然后发送该值。
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)
我有一个 mongoose 查询,可以找到一堆场地,然后执行 google 查询来查找到这些场地的行驶距离。 google 函数在一个 promise 中,然后我必须做 res.json venues.emitted.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)
您的 distancePromise
函数不 return Promise 因此会立即解析。
findDistance
执行 return 一个 Promise,该 Promise 将结果作为第一个参数解析。
这就是您所看到的 "wrapping" 结果的属性。
只需使用
return findDistance()
.then(res.json)
返回该 Promise 将允许捕获最后一个函数的错误。
Venue.find {}
.lean()
.then (dbResponse) ->
venues = dbResponse
if req.param('hotelId')
hotelId = req.param('hotelId');
return findDistances(hotelId, venues, req)
.then (res.json)
else
return res.json venues
.catch (err) ->
res.status(400).send(err)
当您调用 returns 承诺的函数时,您应该获得承诺返回给您的值,然后发送该值。
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)