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瀑布示例:
我按照你的建议做了,现在一切顺利。谢谢