YouTube API不会从功能返回搜索查询?

时间:2013-11-20 05:38:05

标签: javascript youtube youtube-api google-api

我注意到当我将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;
}

1 个答案:

答案 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);
});

这是最好的方式,我相信最正确的方法来实现你想要的!

希望有所帮助:)