所以我在request内使用async.each并在调用几个请求后给了我{[错误:套接字挂断]代码:'ECONNRESET'}。知道我做错了什么吗?
async.eachSeries(videos, function (video, next) {
if (initialVideosObj[video.id] == false) {
var url = config.youtubeApiUrl + "videos?part=contentDetails,snippet,player&key=" + config.youtubeKey + "®ionCode=" + config.regionCode + "&id=" + video.id
request(url, function (error, response, body) {
if (error) {
console.error("ERROR:", error, url);// afet a few requests it gives me { [Error: socket hang up] code: 'ECONNRESET' }, but the funny thing is that the logged url has no problem when I call it manually!
next(error);
} else if (response.statusCode == 200) {
var parsedVideoData = JSON.parse(body);
video["duration"] = convertDuration(parsedVideoData.items[0].contentDetails.duration);
video["yt_subscribe_id"] = parsedVideoData.items[0].snippet.channelId;
next();
}
});
} else {
setImmediate(next);//Since there is no async operation I use setImmediate!
}
}, function (err) {
if (err) {
console.error(err.stack, err);
} else {
console.log("Done")
}
});
更新:
这是我得到的错误堆栈:
{ [Error: socket hang up] code: 'ECONNRESET' }
/myProj/node_modules/longjohn/dist/longjohn.js:185
throw e;
^
/myProj/getVideo.js:207:71,done (/myProj/node_modules/async/lib/async.js:126:15),/myProj/node_modules/async/lib/async.js:32:16,/myProj/getVideo.js:141:45,Request._callback (/myProj/getVideo.js:399:13),self.callback (/myProj/node_modules/request/request.js:354:22),Request.emit (events.js:107:17),Request.onRequestError (/myProj/node_modules/request/request.js:1011:8)
答案 0 :(得分:0)
这些请求的发送速度有多快?也许你达到他们的速度限制?有关详细信息,请参阅https://developers.google.com/youtube/v3/getting-started#quota。这可以解释为什么手动操作永远不会给你错误。