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