Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.156.140] |
|
Сообщ.
#1
,
|
|
|
Доброго времени суток!
Как вы наверно уже знаете есть модная в последнее время в народе библа RxJS Так вот начал ее изучать на простых примерах все пучком. Теперь пытаюсь перенести императивный код относительно простого примера чтения файла, модификации и записи измененных данных в новый файл, на рельсы реактивного программирования, но не получается const fs = require('fs'); const path = require('path'); const sourceFilePath = path.join(__dirname, 'data.txt'); const targetFilePath = path.join(__dirname, 'new-data.txt'); const logFilePath = path.join(__dirname, 'app.log'); // async imperative code fs.readFile(sourceFilePath, 'utf8', (err, data) => { if (err) return console.log(err.message); var newData = data.replace(/microsoft/gi, 'mudosoft'); fs.writeFile(targetFilePath, newData, err => { if (err) return console.log(err.message); fs.appendFile( logFilePath, `${path.parse(targetFilePath).base} written\n`, err => { if (err) return console.log(err.message); console.log('Done.'); } ); }); }); console.log('Processing file...'); Вот нашел примерчик на RxJS, но он короткий // async reactive code const { bindNodeCallback } = require('rxjs'); const readFile = bindNodeCallback(fs.readFile); readFile(sourceFilePath, 'utf8').subscribe( data => console.log(data), err => console.error(err.message) ); Возможно уже кто-то подобное делал, щас на собеседовании в Google требуют знания RxJS |
Сообщ.
#2
,
|
|
|
Пришлось немного забежать вперед и расширить кругозор о RxJS, а именно об операции mergeMap. Вот что получилось, код стал более читаем и более коротким
// async reactive code const { bindNodeCallback } = require('rxjs'); const { map, mergeMap } = require('rxjs/operators'); const readFile = bindNodeCallback(fs.readFile); const writeFile = bindNodeCallback(fs.writeFile); const appendFile = bindNodeCallback(fs.appendFile); readFile(sourceFilePath, 'utf8') .pipe( map(data => data.replace(/microsoft/gi, 'mudosoft')), mergeMap(data => writeFile(targetFilePath, data)), mergeMap(() => appendFile( logFilePath, `${path.parse(targetFilePath).base} written\n` ) ) ) .subscribe( () => console.log('Done.'), err => console.error(err.message) ); console.log('Processing file...'); Ну что сказать RxJS это круто! |