Использование 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, принципы аналогичны.

внешняя разработка