Youtube API 在 node.js Express 中使用异步处理多个依赖请求
Youtube API using async in node.js Express for multiple dependant requests
在我用于处理数据的自定义模块中,我发送了 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;
在您的第一个瀑布函数中
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 瀑布示例:
在我用于处理数据的自定义模块中,我发送了 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;
在您的第一个瀑布函数中
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 瀑布示例: