現在、Angular.jsの使い方を学習しており、RESTのようなAPIを使用して自分の認証コードを書き込もうとしています。以下は私の認証サービスのコードです。JavaScriptでコードを非同期で実行する
私のsignIn
関数の問題は、私のAPIがHTTP 200
を返しても常にfalseを返すということです。しばらくしてから、は、response = res.data.key;
ステートメントの前にreturn response;
ステートメントが実行されているというJavaScriptの同期的な性質のためであるとわかりました。
割り当てが完了した後でreturn文を実行する方法がわかりません(応答がHTTP 200
の場合)。これはどうすればいいですか?
angular.module('app').factory('auth', ['Base64', '$http', function(Base64, $http) {
return {
signIn: function(email, password) {
var response = false;
var encoded = Base64.encode(email + ':' + password);
$http.defaults.headers.common.Authorization = 'Basic ' + encoded;
$http.post('api/v1/sign_in', {}).then(function(res) {
if (res.status == 200) {
response = res.data.key;
}
});
return response;
}
}
}]);