【问题标题】:how to access THIS in cordova plugin with IONIC如何使用 IONIC 在 cordova 插件中访问 THIS
【发布时间】:2020-01-14 19:14:22
【问题描述】:

我正在尝试使用 cordova 插件实现 apple-sign-in 方法并将凭据设置为 firebase。

我真正拥有的是:

    constructor (
        public afAuth: AngularFireAuth,
        public afs: AngularFirestore,
        @Inject(FirebaseApp) firebase: any
    ){
        this.firebase = firebase;
    }

    loginApple(): Promise<boolean> {
        return new Promise((resolve, reject) => {
            cordova.plugins.SignInWithApple.signin({ 
                requestedScopes: [0, 1] 
            }, function(succ){
                var provider = new firebase.auth.OAuthProvider('apple.com').credential(succ.identityToken);
                this.afAuth.auth.signinWithCredential(provider).then(result => {
                    //--> it seems the problem is here, because variable THIS is not available in the cordova plugin without a ionic-native wrapper <--
                }).catch( error => {
                    reject( error.message || error );
                })
            }, function(err){
                reject("Apple login failed");
            })
        })
    }

【问题讨论】:

    标签: javascript firebase cordova-plugins ionic4


    【解决方案1】:

    当您使用 function 关键字定义回调时,this 的含义会发生变化。防止这种情况的最简单方法是使用 fat arrow 符号来定义函数:

    return new Promise((resolve, reject) => {
        cordova.plugins.SignInWithApple.signin({ 
            requestedScopes: [0, 1] 
        }, (succ) => { // change is here
            var provider = new firebase.auth.OAuthProvider('apple.com').credential(succ.identityToken);
            this.afAuth.auth.signinWithCredential(provider).then(result => {
            }).catch( error => {
                reject( error.message || error );
            })
        },(err) => { // changed here too, for consistence
            reject("Apple login failed");
        })
    })
    

    关于问题的原因,另见这个答案,以及其他解决方案:How to access the correct `this` inside a callback?

    【讨论】:

    • 嗨弗兰克,感谢您的回答.. 它可以很容易:)
    猜你喜欢
    • 2017-12-18
    • 1970-01-01
    • 2015-04-08
    • 2020-06-11
    • 2016-11-02
    • 2016-12-15
    • 2018-06-06
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多