gpt4 book ai didi

javascript - Youtube API 在 Node.js Express 中使用异步来处理多个相关请求

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:45 24 4
gpt4 key购买 nike

在用于处理数据的自定义模块中,我发送了 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;

最佳答案

在你的第一个 waterfall 函数中

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

getVideo(body, getVideoCallback);
});

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

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

waterfall example

关于javascript - Youtube API 在 Node.js Express 中使用异步来处理多个相关请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34389442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com