私はスタックオーバーフローに関するこれらの質問が100万あることを認識しています。それはいつも誰かが約束を返さない状況のようです。これは今の場合ではありません...私は確かに約束を私のLoginFactory
に戻しています。ログインポストを行うと、コントローラからエラーが発生します。私はこれが私のスクリプトでいくつかの奇妙なバンドリングと小型化エラーであると仮定することができます。しかし、私は新しい角度になっています。t.then()は関数ではありません。しかし、遅延されたobject.promiseが返されています
なぜ、遅延オブジェクトを返さないという不満はありますか?縮小さスクリプトの追加
var LoginFactory = function ($http, $q) {
console.log("calling login factory constructor");
return function (emailAddress, password, rememberMe) {
var deferredObject = $q.defer();
$http.post('/Account/Login', {
Email: emailAddress,
Password: password,
RememberMe: rememberMe
}).success(function (data) {
console.log("in success", data);
if (data === "True") {
deferredObject.resolve({ success: true });
} else {
deferredObject.resolve({ success: true });
}
}).error(function() {
console.log("in error");
deferredObject.resolve({ success: false });
});
console.log("returning deferred object", deferredObject);
return deferredObject.promise;
}
}
LoginFactory.$inject = ['$http', '$q'];
var LoginController = function ($scope, $routeParams) {
$scope.loginForm = {
emailAddress: '',
password: '',
rememberMe: false,
returnUrl: $routeParams.returnUrl
};
$scope.login = function() {
var result = LoginFactory($scope.loginForm.emailAddress, $scope.loginForm.password, $scope.loginForm.rememberMe);
console.log("result in login func",result);
result.then(function (result) {
if (result.success) {
if ($scope.loginForm.returnUrl !== undefined) {
$location.path('/routeOne');
} else {
$location.path($scope.loginForm.returnUrl);
}
} else {
$scope.loginForm.loginFailure = true;
}
});
}
}
LoginController.$inject = ['$scope', '$routeParams', '$location', 'LoginFactory'];
。返品約束は奇妙に見えます。それが正しいだ場合、私は知っているのに十分なjsのに慣れていないよ
LoginFactory = function(n, t) {
return console.log("calling login factory constructor"),
function(i, r, u) {
var f = t.defer();
return n.post("/Account/Login", {
Email: i,
Password: r,
RememberMe: u
}).success(function(n) {
console.log("in success", n);
n === "True" ? f.resolve({
success: !0
}) : f.resolve({
success: !0
})
}).error(function() {
console.log("in error");
f.resolve({
success: !1
})
}), console.log("returning deferred object", f), f.promise
}
};
LoginFactory.$inject = ["$http", "$q"];
これはほぼ同じようです。私はちょうどそれを試みたが、まったく同じエラーを取得しています。基本的に「約束」は定義されていないと言っています。 変更: 'return deferredObject;'& 'result.promise.then(function(result){' – Adrian