2016-11-15 2 views
0

У меня есть запрос мангуста, который находит кучу мест, а затем выполняет запрос Google, чтобы найти расстояние до этих мест. что функция Google находится внутри обещание и в .Затем я должен сделать res.json venues.emitted.fulfill[0] или иначе приходит из JSON обматываютКак вернуть новый json из функции в рамках обещания

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

    ] 
    }, 
    "ended": true 
} 

Есть ли способ, чтобы избежать возвращения все, что от обещания, так что я могу просто сделать Рез .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) 

ответ

1

Когда вы вызываете функцию, которая возвращает вам обещание, вы должны получить значение, которое обещание возвращает вам, а затем просто отправить это значение.

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) 
1

Ваш distancePromise функция не возвращает Promise, таким образом, решает мгновенно. findDistance действительно возвращает обещание, которое разрешает результаты в качестве аргумента кулака. Вот что вы видите, «обертывая» результаты. Juste использовать

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)