我想记录在对象上调用方法的结果。
当前脚本在属性token
中记录函数的结果字面上我的意思是结果是已定义的函数。
我在这里做错了什么?非常感谢!
$(document).ready(function () {
// General Settings
var
ApiSettings = {
clientId: 'aaa',
clientSecret: 'bbb',
token: function () {
var token;
$.getJSON(ApiSettings.uriGetToken, processData);
function processData(data) {
token = data.access_token;
}
return token;
}
}
ApiSettings.uriGetToken = 'https://ccc.com/oauth/token?grant_type=client_credentials&client_id=' + encodeURIComponent(ApiSettings.clientId) + '&client_secret=' + encodeURIComponent(ApiSettings.clientSecret);
console.log(ApiSettings);
console.log(ApiSettings.uriGetToken);
var test = ApiSettings.token;
console.log(test);
});
答案 0 :(得分:1)
我认为你有两个问题。
1)您需要在使用之前定义processData函数。
// $.getJSON(ApiSettings.uriGetToken, processData);
// function processData(data) {
// token = data.access_token;
// }
// Becomes:
function processData(data) {
token = data.access_token;
}
$.getJSON(ApiSettings.uriGetToken, processData);
2)您需要调用令牌方法。
// var test = ApiSettings.token;
// Becomes:
var test = ApiSettings.token(); // Note the new brackets.
答案 1 :(得分:1)
尝试替换
token: function () {
var token;
$.getJSON(ApiSettings.uriGetToken, processData);
function processData(data) {
token = data.access_token;
}
return token;
}
与
token: (function () {
var token;
$.getJSON(ApiSettings.uriGetToken, processData);
function processData(data) {
token = data.access_token;
}
return token;
})()
应该内联执行你的函数。
或者,您可以将URI作为参数传递给令牌函数
token: function (tokenURI) {
var token;
$.getJSON(tokenURI, processData);
function processData(data) {
token = data.access_token;
}
return token;
}
然后致电
ApiSettings.token('https://ccc.com/oauth/token?.......');
答案 2 :(得分:0)
从准备好的部分中取出你的代码,它会起作用。 我在我的Chrome浏览器的控制台中测试了它,它的工作原理。 可能是范围问题。