我上的角2服務在運行下面的代碼的離子2應用程序:結果承諾的Facebook登錄
signInWithFacebook(): firebase.Promise<any>
{
if (this.platform.is('cordova'))
{
console.log('Running on cordova...');
Facebook.login(['email', 'public_profile']).then(res =>
{
const facebookCredential = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken);
console.log('credential value', facebookCredential);
var temp = firebase.auth().signInWithCredential(facebookCredential);
console.log('temp value: ', temp);
return temp;
});
}
else
{
return this.auth$.login({
provider: AuthProviders.Facebook,
method: AuthMethods.Popup
});
}
}
然後我登錄組件頁面上我這樣稱呼它,上的登錄按鈕:
pubic doFacebookLogin(): void
{
var temp = this.userDataService.signInWithFacebook()
.then(() =>
{
console.log("Passed here! [1]");
this.onSignInSuccess();
console.log("Passed here! [2]");
});
}
我的控制檯登錄以下,當我按一下按鈕:
Running on cordova...
main.js:46695 TypeError: Cannot read property 'then' of undefined at LoginPage.doFacebookLogin (main.js:50920).....
credential value Lf {accessToken: "xxxxxx", provider: "facebook.com"}
temp value: I {F: 0, ka: undefined, o: I, fa: null, Ma: null…}
我期待的流程是這樣的:
- 調用
doFacebookLogin()
方法 - 調用
service.signInWithFacebook()
方法 控制檯登錄「運行在科爾多瓦...」 - 步驟[1]等待返回[2]
- 調用
Facebook.login(['email', 'public_profile'])
- 的promisse當[4]結論登錄時,它調用
firebase.auth().signInWithCredential()
方法,它返回一個承諾太 控制檯日誌「證書值」和「臨時值」 - 的結果承諾[5]然後,對
service.signInWithFacebook()
功能 - 的
doFacebookLogin()
函數最後處理的承諾上返回的返回[6]和執行onSignInSuccess()
但是從控制檯日誌,我們可以看到它正在記錄'運行在科爾多瓦',然後我們在第一個函數的調用.then
(所以Facebook登錄結果承諾尚未處理(所以返回承諾不存在),以及之後這個Facebook登錄處理(現在它已經存在,但其他功能已經試圖處理它,產生異常)。
我對這些承諾失去了什麼?
OMG !!真是太遺憾了,我發佈了它!但是,真的,我花了半天的時間試圖找到它。現在我只是想知道爲什麼Typescript沒有抱怨並不是所有的路徑都返回了一些東西......真的非常感謝! – RBasniak
不要冒汗。我們都做了類似的事情。 –