На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> readFile , RxJS
    Доброго времени суток!
    Как вы наверно уже знаете есть модная в последнее время в народе библа RxJS :D
    Так вот начал ее изучать на простых примерах все пучком. Теперь пытаюсь перенести императивный код относительно простого примера чтения файла, модификации и записи измененных данных в новый файл, на рельсы реактивного программирования, но не получается :wall:
    ExpandedWrap disabled
      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, но он короткий
    ExpandedWrap disabled
      // 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 :D
      Пришлось немного забежать вперед и расширить кругозор о RxJS, а именно об операции mergeMap. Вот что получилось, код стал более читаем и более коротким
      ExpandedWrap disabled
        // 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 это круто! :D
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0176 ]   [ 15 queries used ]   [ Generated: 16.04.24, 20:37 GMT ]