は、だから私はtestVariableという変数を定義しているsignInWithPopup。firebase.auth()内から変数を変更し、($ scope.signInの内部初期に設定することはできません)機能。次にfirebase.auth()。signInWithPopup(プロバイダ).then()の機能をに変更しました。場合I にconsole.log()firebase.auth()。signInWithPopup(プロバイダ).then()機能外部それは初期を返します。私はそれを返すように変更、以下のコードで間違っていますか?どんな助けでも大歓迎です。は(プロバイダ)機能
var app = angular.module("myApp", []);
app.controller("MainController", ["$scope", function ($scope){
$scope.googleSignInStyle = {};
$scope.googleSignInText = "";
$scope.signIn = function(){
var provider = new firebase.auth.GoogleAuthProvider();
var testVariable = "initial";
firebase.auth().signInWithPopup(provider).then(function(result) {
var token = result.credential.accessToken;
var user = result.user;
var providerData = user.providerData[0];
firebase.database().ref('users/' + providerData.displayName).set({Email: providerData.email, PhotoURL: providerData.photoURL, uid: providerData.uid});
testVariable = "changed";
}).catch(function(error) {
var errorCode = error.code;
var errorMessage = error.message;
var email = error.email;
var credential = error.credential;
console.log ("Error! Error code: " + errorCode + ", Email: " + email + ", Credential: " + credential + ". That's all we know.");
});
console.log (testVariable);
}
}]);
.then()関数が完了するまで、残りのコードを遅延させることは可能ですか?私がしようとしているのは、ユーザーがサインインすると、私は自分の名前を言うためにGoogleのボタンを使ってサインインを変更したいのです。これを行うには、変数 '$ scope.googleSignInText'をユーザ名に変更するだけです。問題は何らかの理由で.then()関数内から変数を変更できないということです。 – WebGavDev
約束事の動作は、約束事が完了した後、非同期で実行し、then部分を実行することです。だから、コードの残りの部分は、それが完了するのを待つことができません –