【问题标题】:Calling YouTube API request in Angular JS service在 Angular JS 服务中调用 YouTube API 请求
【发布时间】:2014-12-23 05:19:50
【问题描述】:

我在创建基于“搜索词”进行简单搜索的 Youtube 服务时遇到问题。我想做的是允许控制器调用我的 youtube 服务(即 searchVideo("dogs"))并以字符串的形式获取视频 ID。

此时,我注意到 requestVideoId 在请求完成执行之前被返回。由于不熟悉 JS,我想要一个示例,说明如何让我的 searchVideo() 函数正确返回 requestVideoId(在请求完成后)。

(function () {
'use strict';

var serviceId = 'youtubeService';
angular.module('app').factory(serviceId, ['common', youtubeService]);

function youtubeService(common) {
    var service = {
        searchVideo: searchVideo
    };

    return service;

    function searchVideo(searchText) {
        var requestVideoId = "";
        var request = gapi.client.youtube.search.list({
            q: searchText,
            part: 'snippet'
        });

        request.execute(function(response) {
            var responseList = response.result;
            console.log(responseList.items[0].id.videoId);
            requestVideoId = responseList.items[0].id.videoId;
        });

        console.log(requestVideoId);
        return requestVideoId;
    }
}
})();

我已经检查过这个问题...YouTube Asynchronous function ...但我想保留 searchVideo() 功能。我可能会遗漏一些东西。提前谢谢。

【问题讨论】:

    标签: javascript angularjs asynchronous youtube-api


    【解决方案1】:

    searchVideo 应该返回一个promise,它会在未来得到解决。比如:

     function searchVideo(searchText) {
            var defer=$q.defer();
            var requestVideoId = "";
            var request = gapi.client.youtube.search.list({
                q: searchText,
                part: 'snippet'
            });
    
            request.execute(function(response) {
                var responseList = response.result;
                console.log(responseList.items[0].id.videoId);
                requestVideoId = responseList.items[0].id.videoId;
                defer.resolve(requestVideoId);
            });
    
            console.log(requestVideoId);
            return defer.promise;
        }
    

    现在你可以使用promise api,在promise被解析时注册一个回调:

    youtubeService.searchVideo('test') .then(function(requestVideoId) { // can access the id here});

    了解what promises arehow promises work in Angular

    【讨论】:

    • 感谢您的精彩回答和指导。这很奏效,帮助我开始理解 Angular。谢谢!
    猜你喜欢
    • 2017-02-10
    • 2018-02-15
    • 2015-11-11
    • 2014-10-07
    • 2021-05-02
    • 2023-03-05
    • 2014-10-19
    • 2013-09-19
    • 2016-09-09
    相关资源
    最近更新 更多