gpt4 book ai didi

node.js - 为什么 node.js 异步模块在使用 async.eachLimit(array, limit, function, callback) 的第一步后停止?

转载 作者:搜寻专家 更新时间:2023-10-31 23:39:02 26 4
gpt4 key购买 nike

如果我使用这段代码:

async.eachLimit(body.photos.photo, 10, function(photo) {

var flickr_getphoto_path = ".....";

request.get({url: flickr_host_url + flickr_getphoto_path, json: true}, function(error, response, body) {
if (!error && response.statusCode == 200) {

console.log("SIZES LENGTH: " + body.sizes.size.length);
var source_url = body.sizes.size[body.sizes.size.length - 1].source;
request(source_url).pipe(fs.createWriteStream(path_for_downloads + path.basename(source_url)));
}
});

}

处理在 10 个请求后停止(即在第一个周期后)。应该有 10 个周期。

有人知道为什么它不能正常工作吗?

最佳答案

您设置的异步功能有误。第三个参数(迭代器函数)有两个参数:被迭代的项目,以及一个告诉异步它已经完成的回调。你错过了(因此永远不会调用)回调,所以 async 不知道是时候进行下一批了。

var async = require('async');

async.eachLimit(body.photos.photo, 10, cacheOnePhoto, function(err){
if(err){
console.log(err);
} else {
console.log('Processing complete');
};
})

function cacheOnePhoto(photo, done){
var flickr_getphoto_path = ".....";
request.get({
url: flickr_host_url + flickr_getphoto_path,
json: true
}, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log("SIZES LENGTH: " + body.sizes.size.length);
var source_url = body.sizes.size[body.sizes.size.length - 1].source;
request(source_url).pipe(
fs.createWriteStream(path_for_downloads + path.basename(source_url))
);
done(null);
} else {
done('Request error for '+flickr_getphoto_path);
}
});
};

关于node.js - 为什么 node.js 异步模块在使用 async.eachLimit(array, limit, function, callback) 的第一步后停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17236726/

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