Youtube API在node.js Express中使用asynchronous来处理多个相关请求

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

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

要检查这是正常工作,我logging第一个请求中的第二个函数的结果,但网页没有运行,并没有在控制台中返回。

这里有什么问题吗?

 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; 

在你的第一个瀑布function

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

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

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

签出async.js瀑布的例子:

瀑布的例子