Использование Q и намерений для чтения из файла с помощью Node
Использовать q чрезвычайно просто. На этой странице мы будем использовать стратегию отсрочки для разработки отложенного объекта, обращающегося к значению, которое будет разрешено или отклонено в будущем. Например, когда мы асинхронно читаем из файла с помощью Node, если операция прошла успешно, вы, безусловно, можете разрешить объект со всем содержимым файла или, возможно, вы можете отклонить его и перехватить внутри своего кода. Начнем.
Создайте папку на рабочем столе, перейдите в нее и начните файл bundle.json и примите все значения по умолчанию:
mkdir ~/Desktop/q-read && cd $_ && npm init
Установить вопрос:
npm i q -S # -S означает как производственная зависимость
Создайте фиктивный файл:
сенсорный dummy.txt
эхо привет › dummy.txt
Результат в файле main.js, в котором будет сохранен основной код:
коснитесь main.js
Теперь мы готовы заполнить файл primary.js.
Во-первых, давайте просто прочитаем файл с vanilla Node:
вар фс = требуют('фс');
fs.readFile('./dummy.txt', 'utf-8', function (err, data)
if (err) return console.log(err);
console. журнал(данные);
);
Здесь мы просто читаем содержимое файла dummy.txt в формате utf-8 и просто выводим это содержимое в консоль. Если вы запустите код с узлом main.js, вам нужно получить следующий вывод:
› узел main.js
привет
Теперь давайте сделаем вещи интересными. Мы создадим функцию read, которая возвращает обещание:
вар q = требуется('q');
var read = function ()
var deferred = q.defer();
deferred.resolve('done');
return deferred.promise;
;
Если вы рассматриваете код, сначала мы загружаем q. Затем мы разрабатываем функцию плюс функцию, которую мы сначала создаем отложенным объектом. И мы просто разрешаем это, используя фиктивное значение, называемое «готово». А в заключении возвращаем обещание свойство deferred.
Теперь давайте посмотрим, как мы можем использовать функцию чтения. Итак, очевидно, что мы собираемся сначала вызвать функцию:
читать()
Всякий раз, когда мы вызываем See Clear, возвращается обещание. Обещание содержит метод с именем then, который вы можете использовать для получения доступа к разрешенному значению:
читать(). затем();
Фактический метод then принимает функцию, а разрешенное значение будет передано в качестве параметра:
read().then(функция doSomething(resolvedData));
А в функции мы могли бы делать с данными все, что захотим:
read().then(function doSomething(resolvedData)
console.log(resolvedData);
);
Это может привести к завершению записи на консоль, потому что это значение, которое разрешается отдельными пользователями. Теперь давайте подождем и посмотрим, как мы можем по тому же принципу применить метод fs.readFile.
вар фс = требуют('фс');
var q = require('q');
var read = function ()
var deferred = q.defer();
fs.readFile('./dummy.txt', 'utf-8', function (err, data )
if (err) deferred.reject(err)
else deferred.resolve(data)
);
return deferred.promise;
;
read().then(function (content)
console.log(content);
).catch(function (err)
console.log(err);
). finally(function ()
console.log('Чтение выполнено.');
);
Если вы пройдете код, мы используем тот же принцип. Есть несколько совершенно новых, почему бы нам не рассмотреть их.
В теле из функции проверяем на ошибку, если ошибка происходит отклоняем промис со всеми ошибками. В противном случае мы разрешили промис, используя содержимое файла. Теперь, когда мы вызываем функцию чтения, мы можем принять разрешенное значение в блоке then. Но если есть ошибка, мы поймаем ее в блоке catch. В конце, независимо от того, что произошло, мы войдем в консоль внутри блока finally.
И это все! В качестве упражнения вы также можете рассмотреть реализацию метода fs.writeFile, принципы аналогичны.