返回数组为空的Javascript函数

返回数组为空的Javascript函数,javascript,Javascript,当我使用getAll时,返回的是一个空表。我很确定它会跳过let filesdir=[]和return filesdir之间的所有内容,因为在我推送文件之后,我使用了console.log,它已经记录了文件,但我不确定为什么它会完全跳过它 目录的图像,我还没有向它添加https,因为我没有费心去看如何使用cloudflare的ssl认证 getAll=异步函数目录{ 设filesdir=[]; 等待fs.readdirdirectory,异步错误,文件=>{ 如果犯了错误,就扔出错误; 对于i=

当我使用getAll时,返回的是一个空表。我很确定它会跳过let filesdir=[]和return filesdir之间的所有内容,因为在我推送文件之后,我使用了console.log,它已经记录了文件,但我不确定为什么它会完全跳过它 目录的图像,我还没有向它添加https,因为我没有费心去看如何使用cloudflare的ssl认证

getAll=异步函数目录{ 设filesdir=[]; 等待fs.readdirdirectory,异步错误,文件=>{ 如果犯了错误,就扔出错误; 对于i=0;ifs.readdir不是一个承诺,所以您不能等待它。这就是它需要回调函数的原因。不要使用回调函数。要获取返回值,请改用await。或者使用fs.readdirsynck如果需要promise接口,请记住requirefs/promises,而不是requirefs。另外,@jiholee,使用.then也很好,因为这就是async的真正目的:让您编写一个函数作为普通代码,但返回一个承诺。由于等待当前无法在全局范围内使用,因此必须使用。然后不要等待*同步操作。使用。你犯了与OP相同的错误;等待不返回承诺的同步操作。此外,不要等待添加解释;从一开始就回答这个问题。我刚刚测试了我的代码,它运行得很好,但在测试时我忘记了,我将第二个elseif值赋给了isFile。它最初是isDirectory,但没有与其他所有内容一起返回。Edit:我在getAll函数前面添加了一些wait,定义为dd,它成功了。
var fs = require('fs');
var path = require('path');

getAll = async function (directory) {
    let filesdir = [];
    var files = fs.readdirSync(directory);

    for (i = 0; i < files.length; i++) {
        var file = files[i];
        var filePath = directory;
        if (await fs.lstatSync(path.join(directory, file)).isFile()) {
            filesdir.push('/' + file);
        } else if (await fs.lstatSync(path.join(directory, file)).isFile()) {
            var dd = getAll(path.join(filePath, file));
            dd.then(function (ee) {
                for (b = 0; b < ee.length; b++) {
                    filesdir.push('/' + ee[b]);
                }
            });
        }
    }

    return filesdir;
};


getAll('./').then(function (ee) {
    console.log(ee);
    for (i = 0; i < ee.length; i++) {
        console.log(ee[i]);
    }
});
// Or
var ee = await getAll('./');
for (i = 0; i < ee.length; i++) {
    console.log(ee[i]);
}