我在将Google API调用存储为变量时遇到了问题。我相信这与变量在 promise 函数中调用的事实有关,我知道一旦执行就不会传递给全局变量。当前代码的结果是"null",这是变量的初始值。
我删除了大部分代码以显示必要的摘录:
var MyApp {
name: null
};
function makeApiCall() {
gapi.client.people.people.get({
'resourceName': 'people/me',
'requestMask.includeField': 'person.names'
}).then(
function(resp) {
MyApp.name = resp.result.names[0].givenName;
return MyApp.name;
});
}
function getIP(json) {
makeApiCall();
var person = MyApp.name;
document.write(person);
}
基本上,我希望 MyApp.name(脚本前面创建的全局变量)的值从"null"更改为 API 响应,以便 getIP(json) 中打印的值是给定的 Name 而不是 null,这是我当前的输出。
换句话说,当我在getIP(json)函数中引用 MyApp.name 时,它应该引用'resp.result.names[0].givenName'而不是'null'。
我已经在这个主题上搜索了一段时间,但除了知道什么不起作用之外没有任何成功。
通过这样做:
makeApiCall();
var person = MyApp.name;
document.write(person);
您告诉 Javascript 将 Google API 调用排队,然后在等待请求完成之前立即使用结果。
此外,您不应该使用 document.write
,因为它会用变量的内容替换整个文档,因为它将在文档呈现后调用。
试试这个:
gapi.client.people.people.get({
'resourceName': 'people/me',
'requestMask.includeField': 'person.names'
}).then(
function(resp) {
MyApp.name = resp.result.names[0].givenName;
//Use MyApp.name here and don't use document.write
});