我需要从Angular中的Controller方法调用Factory方法。但是当我调用Factory方法AuthFactory.login(username,password).then()
时,它会显示像这样的错误
TypeError: AuthFactory.login(...).then is not a function
我想我在这里错过了一个AngularJS承诺的概念。
答案 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
中返回错误条件。
答案 2 :(得分:0)
你要归还一个对象,而不是一个承诺。
如果你想返回一个解析为该对象的promise非常简单:
return $q.when(userInfo);