fs.promises
не является надмножеством fs
. Хотя некоторые методы в fs
заменяются методами с тем же именем ядра, которые возвращают обещание, на нем нет всего того, что имеет простой fs
.
createReadStream()
- это метод вобычный require('fs')
объект, не включенный require('fs').promises
.
Вот почему не рекомендуется делать следующее:
fs = require('fs').promises;
Потому что тогда он вводит всех в заблуждение, включая вас в мысли, что fs
является модулем core nodejs fs. Это не так.
Вместо этого я бы порекомендовал следующее:
const util = require('util'),
request = util.promisify(require('request')),
fs = require('fs'),
fsp = fs.promises;
Затем вы можете использовать fs
и fsp
, в зависимости от ситуации, включая fs.createReadStream()
.
* 1027. * Да, это выглядит немного неопрятно. Возможно, преобразование модуля
fs
в обещания завершено только частично, и когда-нибудь вы сможете использовать
fs.promises
в качестве полной замены - я не знаю, что намерены люди, работающие над этим модулем. На данный момент вы должны использовать обе версии, чтобы получить доступ ко всем функциям.
Также будьте осторожны с util.promisify(require('request'))
. Функция запроса не использует стандартную сигнатуру асинхронного обратного вызова (err, result)
, поскольку она передает три аргумента обратному вызову (err, response, body)
, а не два обычных. Существуют модули производных запросов, которые уже были обещаны (request-promise
и request-promise-native
) и полностью готовы к использованию с обещаниями.