【问题标题】:Youtube API using async in node.js Express for multiple dependant requestsYoutube API 在 node.js Express 中使用异步处理多个依赖请求
【发布时间】:2016-03-27 03:49:22
【问题描述】:

在用于处理数据的自定义模块中,我发送了 2 个请求,首先从我的播放列表中获取视频列表,其次,我使用从第一个结果中获得的 videoID 发送另一个请求。

因为第二个请求依赖于第一个请求,所以我使用的是异步模块的waterfall 方法。

为了检查它是否正常工作,我在第二个函数中记录了第一个请求的结果,但网页没有运行并且在控制台中没有返回任何内容。

这里有什么问题吗?

var data = function(callback) {

    var request = require('request'),
        async = require('async');

    async.waterfall([

        function getVideo (getVideoCallback) {
            var url = "https://www.googleapis.com/youtube/v3/playlistItems";

            var properties = { 
                part: 'snippet, contentDetails', 
                playlistId: 'xxx',
                key: 'xxx',
                maxResults: 50
            }

            request({ url:url, qs:properties}, function(err, response, body) {
                if(err) { console.log(err); return; }
                body = JSON.parse(body);

                getVideo(body, getVideoCallback);
            });

        },

        function getVideoDetails (result, getVideoDetailsCallback) {

            console.log(result);

            ...

        }
    ], function (err, result) {

        if (err) { console.log(err); return; }

        callback(result);

    }); 
}

module.exports = data;

【问题讨论】:

    标签: javascript node.js youtube node-async


    【解决方案1】:

    在您的第一个瀑布函数中

            request({ url:url, qs:properties}, function(err, response, body) {
                if(err) { console.log(err); return; }
                body = JSON.parse(body);
    
                getVideo(body, getVideoCallback);
            });
    

    您再次调用第一个瀑布函数而不是调用函数回调,这是一个带有错误参数的递归调用。为了进入瀑布堆栈中的下一个函数,您需要像这样调用回调:

            request({ url:url, qs:properties}, function(err, response, body) {
                if(err) { console.log(err); return; }
                body = JSON.parse(body);
    
                getVideoCallback(null, body);
            });
    

    查看 async.js 瀑布示例:

    waterfall example

    【讨论】:

    • 我按照你的建议做了,现在进展顺利。谢谢。
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2019-03-26
    • 1970-01-01
    相关资源
    最近更新 更多