Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带嵌套依赖承诺调用的异步等待_Javascript_Node.js_Async Await - Fatal编程技术网

Javascript 带嵌套依赖承诺调用的异步等待

Javascript 带嵌套依赖承诺调用的异步等待,javascript,node.js,async-await,Javascript,Node.js,Async Await,我试图学习更多关于异步、等待承诺以及所有这些的知识,我已经理解了它背后的概念,但是当涉及到这些承诺的嵌套逻辑时,我遇到了麻烦。 理论上,我所理解的是,整个async await将使您的代码看起来更加同步,这意味着所有期望承诺成为您使用await的结果的东西。 这段代码的主要目标是从目录列表中返回来自readdirPromisify、filter的文件,并只给我一个文件列表。使用stat.isf文件。 如果有人能帮忙,我将不胜感激。谢谢 const fs = require("fs"); cons

我试图学习更多关于异步、等待承诺以及所有这些的知识,我已经理解了它背后的概念,但是当涉及到这些承诺的嵌套逻辑时,我遇到了麻烦。 理论上,我所理解的是,整个async await将使您的代码看起来更加同步,这意味着所有期望承诺成为您使用await的结果的东西。 这段代码的主要目标是从目录列表中返回来自readdirPromisify、filter的文件,并只给我一个文件列表。使用stat.isf文件。 如果有人能帮忙,我将不胜感激。谢谢

const fs = require("fs");
const { exec } = require("child_process");
const { promisify } = require("util");
const [, , ...args] = process.argv;
const isOptionDirectory = promisify(fs.stat);
const readdirPromisify = promisify(fs.readdir);
const [packageName] = args;

const test = async function() {
  const dirs = await readdirPromisify(__dirname);
  const files = await dirs.filter(async file => {
    const option = await isOptionDirectory(file);
    return option.isFile();
  });
  return files;
};

console.log(test().then(val => console.log(val)));
筛选器不支持承诺。异步函数返回的承诺将被视为真实值

您将希望使用Promise.all:


筛选器不支持承诺,这意味着它不关心您传递给它的回调是否返回承诺,也不会等待它完成异步方法Beautiful。。我感谢你的答复。非常感谢。
async function test() {
  const paths = await readdirPromisify(__dirname);
  const options = await Promise.all(paths.map(isOptionDirectory));
  return paths.filter((_, i) => options[i].isFile());
}