gpt4 book ai didi

javascript - Node 异步库 filterLimit 总是返回 undefined

转载 作者:行者123 更新时间:2023-11-30 19:24:16 24 4
gpt4 key购买 nike

我正在尝试异步过滤文件路径列表以仅返回现有文件。我正在使用 async 库的 filterLimit连同 fs-extra。功能如下:

const asyncFilter = require('async').filterLimit;
const fsExtra = require('fs-extra');

async function filterFiles(fileList){
const existing = await asyncFilter(fileList, 5, (file, callback) => {
console.log(file); // looks good

fsExtra.pathExists(file, (err, exists) => {
const result = err ? false : exists;
console.log(result); // looks good (boolean)

callback(null, result);
});
});

console.log(existing); // always undefined...
}

最佳答案

编辑 2:下面的两个建议都不起作用...这是一个工作版本,其中已弃用的 fs.exists() 被替换为 fs。访问()

const async = require('async');
const fs = require('fs');

async function filterFiles(fileList) {
try {

const result = await async.filterLimit(fileList, 5, function(filePath, callback) {
fs.access(filePath, function(err) {
callback(null, !err)
});
});

console.log(result);
} catch(err) {
console.log(err);
}
};

你不能简单地做:

不工作

    const asyncFilter = require('async').filterLimit;
const fs = require('fs');

async function filterFiles(fileList) {
let result = [];
await asyncFilter(fileList, 5, fs.exists, function(existing) {
// array of existing files
console.log(existing);
// now assign the existing files to result array
result = existing;
});
// should be the same as existing in callback function
console.log(result);
};

不需要 fs-extra。我认为您的问题是 async.filterLimit() 不返回任何内容,而是执行回调函数,因此仅通过将 async.filterLimit() 分配给变量并不意味着你在那里得到结果,你会得到 undefined 因为函数不返回任何东西!

编辑:根据@Jaromanda X 的评论从上面改编的片段:

    const asyncFilter = require('async').filterLimit;
const fs = require('fs');

async function filterFiles(fileList) {
let result = await asyncFilter(fileList, 5, fs.exists);
// should contain only existing files
console.log(result);
};

关于javascript - Node 异步库 filterLimit 总是返回 undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57085359/

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