判断异步请求是否结束? - CNode技术社区

判断异步请求是否结束?
发布于 10 年前 作者 kidbai 6411 次浏览 最后一次编辑是 9 年前 来自 问答

需求: 找到所有文件夹下文件的下载信息 场景:某个网站有可下载的文件夹,文件夹中可能包含文件文件夹两种类型的东西。文件夹下一层目录的信息可以通过请求A获取,文件可以通过请求B获取文件的下载信息,我希望所有的B请求结束,拿到所有的下载地址并统一做处理。 文件夹的层级和文件的数量都是不明的。 目前node和浏览器都可以用eventproxy实现类似的场景,但据我了解,使用eventproxy我得知道有几个异步请求,如下有template、dat啊、和|10n 对于不知道数量的异步请求,如何实现?

_.template(template, data, l10n);
	});
 $.get("template", function (template) {
// something
ep.emit("template", template);
	});
 $.get("data", function (data) {
// something
ep.emit("data", data);
	});
 $.get("l10n", function (l10n) {
// something
ep.emit("l10n", l10n);
 });```
2 回复

你需要遍历一个目录下的所有文件?

function walk(dir, ext, callback) {
 ext = ext.charAt(0) === "." ? ext : `.${ext}`;
 fs.readdir(dir, (err, files) => {
 files.forEach(f => {
 fs.lstat(path.join(dir, f), (err, st) => {
 if (st.isDirectory()) {
 walk(path.join(dir, f), ext, callback);
 } else {
 if (path.extname(f) === ext) {
 callback(null, f);
 }
 }
 })
 });
 });
}
function walk(dir) {
 
 let readDirAsync = Promise.promisify(fs.readdir);
 let lstatAsync = Promise.promisify(fs.lstat);
 return readDirAsync(dir).then(files => {
 return Promise.all(files.map(f => {
 let file = path.join(dir, f);
 return lstatAsync(file).then(stat => {
 if (stat.isDirectory()) {
 return walk(file);
 } else {
 return [file];
 }
 });
 }));
 }).then(files => {
 return files.reduce((pre, cur) => pre.concat(cur));
 });	
}
walk("~/home").then(x => console.log(x));

希望这个能给你思路。其中,把readDirAsynclstatAsync 换成你的函数调用就差不多了,能获得所有文件,然后下面进行处理。

回到顶部

AltStyle によって変換されたページ (->オリジナル) /