【问题标题】:YouTube API doesn't return search query from function?YouTube API 不从函数返回搜索查询?
【发布时间】:2013-12-03 23:44:08
【问题描述】:
我注意到,当我将 str 设为全局变量时,而不是像我在下面的 search 函数中那样让它从函数中返回,它可以正常工作。但是,当我尝试返回它时,它返回未定义。我该如何解决这个问题?我不想使用全局变量,因为我希望将搜索功能原子化。
function search(query) {
var str;
// Use the JavaScript client library to create a search.list() API call.
var request = gapi.client.youtube.search.list({part:'snippet',q:query});
request.execute(function(response) {
str = JSON.stringify(response.result);
str = JSON.parse(str);
//console.log(str);
});
return str;
}
【问题讨论】:
标签:
javascript
youtube
youtube-api
google-api
【解决方案1】:
我相信您进行了异步调用...这意味着您的函数将在执行回调之前返回 str !
这就是你变得不确定的原因:
var str; // Undefined!
...
return str; // Returns before your callback executes...
同步调用的问题是,如果您等待响应并且它永远不会到达,您可能会冻结客户端!
一种方法是在回调执行时调用另一个名为“gotSearchResults(results)”的方法。
另一种我完全不推荐的肮脏方式是启动一个循环,一直运行它直到 str 被定义并得到结果。
最好的方法是自己进行回调
function search(query, callback) {
var str;
// Use the JavaScript client library to create a search.list() API call.
var request = gapi.client.youtube.search.list({part:'snippet',q:query});
request.execute(function(response) {
str = JSON.stringify(response.result);
str = JSON.parse(str);
//console.log(str);
callback(str); // Execute your callback with the string as argument!
});
}
search('some query', function(result) {
console.log(result);
});
这是最好的方法,我相信最正确的方法可以达到你想要的!
希望对你有帮助:)