Ответ 1
Если вы хотите определить обещание в функции и использовать его где-то в другом месте, прежде всего, вам нужно вернуть обещание от этой функции, чего вы не делаете в своем коде. Затем вам нужно фактически называть эту функцию, которую вы также не выполняете. И, наконец, вам нужно использовать обратный вызов then
для возвращаемого значения, которое вы также не делаете в этом случае.
Нет смысла сохранять обещание в локальной переменной promiseFriend
, которая привязана к этой функции. Также нет смысла возвращать значение в обратном вызове then
: .then(function (friends) { return friends; })
- я понятия не имею, что здесь пытались сделать.
Я предполагаю, что findFriends
должен быть обработчиком маршрута для Express. Если это так, убедитесь, что вы отправляете ответ в каждом случае (который вы не делаете для friends.length===0
). Кроме того, вам нужно фактически добавить обработчик then
к сохраненному обещанию, если вы хотите действовать, когда он будет разрешен. Прямо сейчас у вас даже нет friends
, определенного в вашей функции. Также добавьте обработчики catch
, а также отправьте ответ для этого случая.
Затем вы можете вернуть обещание от своей функции, но не если это обработчик маршрута, это не имеет смысла. Вы можете вернуть обещание от функции:
function x() {
return MyFriendes.find({}).exec();
}
а затем используйте его:
x().then(friends => ...).catch(error => ...);
но вы не можете использовать возвращаемые значения, если вы не возвращаете его, вы не можете использовать переменные undefined, как если бы они были определены, и вам действительно нужно рассмотреть, каково ваше возвращаемое значение.
Я предлагаю вам узнать, как работает Node, потому что кажется, что вы скопировали и вставили какой-то случайный код, объединили его и ожидали, что он сделает то, что вы хотите, даже не пытаясь понять его.
Чтобы лучше понять асинхронный характер Node, который дает этот порядок выполнения здесь, см. ответы:
- Подробное объяснение того, как использовать обратные вызовы и promises
- Объяснение того, как использовать promises в сложных обработчиках запросов
- Объяснение того, что на самом деле представляет собой обещание, на примере запросов AJAX
- Объяснение обратных вызовов, promises и способ доступа к данным, возвращаемым асинхронно
Не пытайтесь писать программы Node, прежде чем понимать концепцию вызовов функций, возвращаемых значений, обратных вызовов и в этом случае promises.