类型错误:无法读取未定义的属性“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) => ...
.
当我使用箭头函数时,它显示不使用.success
方法。
嘿@ConnorsFan 你能在我的代码中详细说明吗?
将function(resolve, reject)
替换为(resolve, reject) =>
。你试过了吗?
【参考方案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