我注意到当我将str
作为一个全局变量时,它不是像我在下面的search
函数中那样从函数返回,而是按原样运行。但是,当我尝试返回它时,它返回undefined。我该如何解决这个问题?我不想使用全局变量,因为我希望搜索功能被原子化。
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;
}
答案 0 :(得分: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);
});
这是最好的方式,我相信最正确的方法来实现你想要的!
希望有所帮助:)