类型错误:无法读取未定义的属性“clientId”

Posted

技术标签:

【中文标题】类型错误:无法读取未定义的属性“clientId”【英文标题】:Type error: cannot read property 'clientId' of undefined 【发布时间】:2019-01-24 20:20:16 【问题描述】:

我收到一个错误(在 android 模拟器中)

当我调用函数linkedinLogin() 时,警告框中会弹出此错误。

`clientId = 'xxxxx';`
    linkedinLogin() 
        this.platform.ready().then(() => 
          this.linkedinPage().then(success => 
            alert(success.access_token);
          ,(error) => 
            alert(error);
          );
        );
      

      linkedinPage(): Promise<any> 
        return new Promise(function(resolve, reject) 
          var browserRef = window.cordova.InAppBrowser.open('https://www.linkedin.com/uas/oauth2/authorization?client_id=' + this.clientId + '&redirect_uri=' + this.redirect_uri + '&scope=' + this.appScope.join(" ") + '&response_type=code&state=' + this.state, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
          browserRef.addEventListener("loadstart", (event) => 
            if((event.url).indexOf(this.redirect_uri) === 0) 
              try 
                var requestToken = (event.url).split("code=")[1].split("&")[0];
                let headers = new Headers();
                headers.append('Content-Type', 'application/x-www-form-urlencoded');
                this.http.post("https://www.linkedin.com/oauth/v2/accessToken?client_id='xxxx'&client_secret='xxxxx'&redirect_uri=http://localhost/callback&grant_type=authorization_code&code=" + requestToken,
                headers: headers)
                .success(function(data)
                  resolve(data);
                  alert(data);
                )
                .error(function(data,status) 
                  reject('problem in authenticating');
                )
                .finally(function() 
                  browserRef.close();
                ,10);
               catch(e) 
                  setTimeout(function() 
                    browserRef.close();
                  , 10);
                
            
            else 
              browserRef.addEventListener("exit", function(event) 
                reject("The linkedin sign in flow was canceled");
            );
             

          );


      );
      

【问题讨论】:

How to access the correct `this` inside a callback?的可能重复 尝试使用箭头函数:new Promise((resolve, reject) =&gt; ... . 当我使用箭头函数时,它显示不使用.success 方法。 嘿@Co​​nnorsFan 你能在我的代码中详细说明吗? function(resolve, reject) 替换为(resolve, reject) =&gt;。你试过了吗? 【参考方案1】:

在变量中设置 this 关键字以访问您的类的上下文,如下所示

    linkedinPage(): Promise<any> 
var self=this;
        return new Promise(function(resolve, reject) 
          var browserRef = window.cordova.InAppBrowser.open('https://www.linkedin.com/uas/oauth2/authorization?client_id=' + self.clientId + '&redirect_uri=' + this.redirect_uri + '&scope=' + this.appScope.join(" ") + '&response_type=code&state=' + this.state, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');

var self=this;

self.clientId

希望对你有帮助

【讨论】:

以上是关于类型错误:无法读取未定义的属性“clientId”的主要内容,如果未能解决你的问题,请参考以下文章

错误:`未捕获(承诺中)类型错误:无法读取未定义的属性'doc'`

未捕获的类型错误:无法读取未定义的属性“区域”?

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

未捕获的类型错误:无法读取未定义的属性 toLowerCase

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”

带有 Ionic 4 的 SQLite?无法读取未定义类型错误的属性“then”:无法读取未定义的属性“then”