Использование fs.read внутри обещания не работает

#node.js

Вопрос:

Я пытаюсь выполнить fs.чтение после выполнения обещания с помощью .then()

Вот как выглядит мой код

 (async () =gt; {  const feed = await parser.parseURL('https://www.nasa.gov/rss/dyn/breaking_news.rss');  console.log(feed.title);  const items = [];   await Promise.all(feed.items.map(async (currentItem) =gt; {   // some code here to create data  items.push(data);  })).then(  items.forEach((element) =gt; {  const file = downloadFile(element.url);   let checksumValue;  try {  fs.readFileSync(file, (_err, data) =gt; {  checksumValue = generateChecksum(data);  console.log(`The checksum is: ${checksumValue}`);  // Delete the downloaded file  deleteFile(file);  });  } catch (error) {  console.error(error);  // expected output: ReferenceError: nonExistentFunction is not defined  // Note - error messages will vary depending on browse  }  })(),  );  })();  

Но он не управляет этим фрагментом кода :

 fs.readFileSync(file, (_err, data) =gt; {  checksumValue = generateChecksum(data);  console.log(`The checksum is: ${checksumValue}`);  // Delete the downloaded file  deleteFile(file);  });  

Как я должен прочитать файл?

Ответ №1:

fs.readFileSync это синхронизация, поэтому она не требует обратного вызова.

Либо используйте несинхронизированную версию:

 fs.readFile(file, (_err, data) =gt; {  checksumValue = generateChecksum(data);  console.log(`The checksum is: ${checksumValue}`);  // Delete the downloaded file  deleteFile(file);  });  

или используйте его по назначению:

 const data = fs.readFileSync(file); checksumValue = generateChecksum(data); console.log(`The checksum is: ${checksumValue}`); // Delete the downloaded file deleteFile(file);  

Комментарии:

1. Большое спасибо, второе решение сработало как волшебство