Javascript Youtube API在node.js Express中使用异步处理多个相关请求

Javascript Youtube API在node.js Express中使用异步处理多个相关请求,javascript,node.js,youtube,node-async,Javascript,Node.js,Youtube,Node Async,在处理数据的自定义模块中,我发送了两个请求,首先从播放列表中获取视频列表,然后使用从第一个结果中获取的videoID发送另一个请求 因为第二个请求依赖于第一个请求,所以我使用异步模块的瀑布方法 为了检查它是否正常工作,我将第一个请求的结果记录在第二个函数中,但是网页没有运行,并且在控制台中没有返回任何内容 这里有什么问题吗 var data = function(callback) { var request = require('request'), async =

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

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

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

这里有什么问题吗

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;

在您的第一个瀑布函数中

        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瀑布示例:


我按照你的建议做了,现在一切顺利。谢谢