gpt4 book ai didi

javascript - 我如何重写这段代码,以便不强制执行从 Javascript Promise .then() 方法开始?

转载 作者:行者123 更新时间:2023-11-30 00:11:22 25 4
gpt4 key购买 nike

我正在玩 JS Google API 库。

如何更改以下代码...

function initializeGapiClient(){
API_KEY = "api-key";
API_NAME = "youtube";
API_VERSION = "v3";

gapi.client.setApiKey(API_KEY);

gapi.client.load(API_NAME, API_VERSION).then(function() {
alert('youtube api loaded.');
// return gapi; // I know this is wrong
// But I don't want to trigger code execution from here...
});
}

这样我就可以在代码中随时执行类似于以下内容的操作,而不是从 .then() 方法开始执行:

var gapi = initializeGapiClient();

然后

gapi.client.youtube.search.list({ ... });

没有得到:Uncaught TypeError: Cannot read property 'client' of undefined

我知道我无法从 .then() 方法返回,因为在将变量 (gapi) 分配给将在 Future 中返回的内容时无法为其提供有效值...所以有没有其他方法不涉及修改库代码?也许我可以把它变成同步方法?但是怎么办?

最佳答案

不确定我是否完全理解您的问题。但我认为你有从 promise 中返回 api 的正确想法。如果您还在其外部返回 gapi.clent.load() 方法,则可以 promise 关闭整个函数。

function initializeGapiClient(){
API_KEY = "api-key";
API_NAME = "youtube";
API_VERSION = "v3";

gapi.client.setApiKey(API_KEY);

return gapi.client.load(API_NAME, API_VERSION).then(function(gapi) {
alert('youtube api loaded.');
return gapi;
});
}

如果您在 initializeGapiClient() 函数(及其 promise 的回调)之外声明一个变量,您可以将 promise 结果分配给它。

var gapi;

initializeGapiClient().then(function(cbGapi){
gapi = cbGapi;

gapi.client.youtube.search.list({ ... });
});

不确定为什么要在没有 promise 的情况下开始 JS 执行。我认为它在加载 API 时很有用。

更新:用于错误处理(当 api 尚未加载时)

function apiSearch(...){
if(gapi) gapi.client.youtube.search.list({ ... });
else console.log("Api unavailable!");
}

类似的东西会解释在 api 准备好之前执行操作的错误。

关于javascript - 我如何重写这段代码,以便不强制执行从 Javascript Promise .then() 方法开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36364711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com