【问题标题】: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);
    });
    

    这是最好的方法,我相信最正确的方法可以达到你想要的!

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2014-07-09
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2022-11-08
      相关资源
      最近更新 更多