асинхронное ожидание с вложенным зависимым вызовом Promise - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь узнать больше об асинхронности, жду обещаний и всего этого, я понял концепцию, лежащую в основе этого, но у меня возникают проблемы, когда дело доходит до логики гнезд этих обещаний. Теоретически я понял, что все асинхронное ожидание сделает ваш код более синхронным, а это означает, что все, что ожидает обещание быть результатом, вы используете ожидание. Основная цель этого кода - вернуться из списка каталогов + файлов, которые пришли из readdirPromisify, отфильтровать и предоставить только список файлов. используя stat.isFile (). Если кто-то может помочь, я был бы признателен. Спасибо!

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)));

1 Ответ

0 голосов
/ 04 ноября 2018

filter не поддерживает обещания. Обещание, возвращенное async function, будет считаться истинным значением.

Вы захотите использовать Promise.all:

async function test() {
  const paths = await readdirPromisify(__dirname);
  const options = await Promise.all(paths.map(isOptionDirectory));
  return paths.filter((_, i) => options[i].isFile());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...