Array.prototype.find()在异步函数中返回undefined

时间:2018-06-12 12:36:45

标签: javascript angularjs http asynchronous promise

我的Array.prototype.find()方法存在问题。它在$http request..中使用它似乎无法正常工作我已经尝试了所有想到的东西,但它总是返回undefined。我猜错误是因为我在定义response.data之前记录了user_to_findfound_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 :(得分:2)

您遗失了return。谓词(传递给find的函数)在你的情况下返回undefined,因此find算法没有得到"匹配"。

只需添加return

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

如果您不使用花括号

,可以将其删除
    let found_user = response.data.find(acc=> ( //found_user is always undefined
      acc.username === user_to_find;
    ))

我还建议您使用===(严格比较)代替==进行比较。