Angularjs .then不是函数

时间:2015-10-29 04:45:18

标签: javascript angularjs angularjs-directive

我需要从Angular中的Controller方法调用Factory方法。但是当我调用Factory方法AuthFactory.login(username,password).then()时,它会显示像这样的错误

TypeError: AuthFactory.login(...).then is not a function

Plunker code here

我想我在这里错过了一个AngularJS承诺的概念。

3 个答案:

答案 0 :(得分:3)

对于登录方法,您发送简单的javascript object而不是promise对象。

function login(username, password) {
    var userInfo = {
      "authToken": "6a65dd0c-b35a-429b-a9c0-f5c327ec5d6f",
      "id": "1445138519"
    };
    return userInfo; // Returning javascript object
}

在plunkr中,您有一些注释代码如下:

 // $http.post(API_URL + '/auth/login', {
 //   email: username,
 //   password: password
 // })

然后返回userInfo,返回$http.post对象,然后使用then方法。

答案 1 :(得分:3)

您需要将响应包装在promise中,然后解析。

.factory('AuthFactory', function AuthFactory($http, API_URL, $q) {
 'use strict';
 return {
   login: login
 };

 function login(username, password) {
  var deferred = $q.defer();
  deferred.resolve( 
  {
    "authToken":"6a65dd0c-b35a-429b-a9c0-f5c327ec5d6f",
    "id": "1445138519"
  });
  return deferred.promise;

您返回承诺,但解决实际结果。如果您希望失败,可以执行deferred.reject(),在then中返回错误条件。

Plunker

答案 2 :(得分:0)

你要归还一个对象,而不是一个承诺。

如果你想返回一个解析为该对象的promise非常简单:

return $q.when(userInfo);

http://plnkr.co/edit/YeE8JmqcDSKqQY969Kpo?p=preview