Array.prototype.find () возвращает неопределенное значение в асинхронной функции - PullRequest
0 голосов
/ 12 июня 2018

У меня проблема с методом Array.prototype.find().Кажется, он не работает должным образом, когда используется в $http request... Я перепробовал все, что пришло в голову, но всегда возвращает undefined.Я предполагаю, что ошибка есть, потому что я зарегистрировал response.data и user_to_find до определения found_user, и их значения соответствуют ожиданиям.

Итак, у меня есть этот сервис:

app.service('UserService', ['$http','$q', function($http, $q) {
  return {
    findUser: function(user_to_find) {
      let defer = $q.defer();
      $http({
        method: "GET",
        url: 'http://localhost:3000/users'
      }).then(function(response){
        let found_user = response.data.find(acc=>{ //found_user is always undefined
          acc.username == user_to_find;
        })
        defer.resolve(found_user);
      }),function(response) {
        defer.reject(response);
        console.log("Error finding user");
      }
      return defer.promise;
    }
  }
}])

1 Ответ

0 голосов
/ 12 июня 2018

Вам не хватает return.Предикат (функция, переданная для поиска) возвращает неопределенное значение в вашем случае, поэтому алгоритм поиска не получает «соответствия».

Просто добавьте return:

    let found_user = response.data.find(acc=>{ //found_user is always undefined
      return acc.username == user_to_find;
    })

Youможете не указывать, если вы не используете фигурные скобки

    let found_user = response.data.find(acc=> ( //found_user is always undefined
      acc.username === user_to_find;
    ))

Я бы рекомендовал также использовать === (строгое сравнение) вместо == для сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...