Size: a a a

Node.js — русскоговорящее сообщество

2020 February 26

¿

¿hope in Node.js — русскоговорящее сообщество
А если без фреймворков, то как вытащить буфер файла из запроса?Везде одни примеры на экспресе и какой то библиотеке для мультипарт запросов.
источник

NS

Nikolay 🤷🏼‍♀️ Simotiuk in Node.js — русскоговорящее сообщество
Кто работал с Moleculer, можно в двух словах о нем, подводные камни и тп. Ничего плохого нагуглить не могу 🤔
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
for (const file of files) {
   await processFile(folder, file).catch(err => {
       console.error(err.message);
        process.exit(-1);
   });
}
подскажите, как перебрать циклом files дожидаясь выполнения processFile
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
пробовал for await (...) тоже не то, он не ждет, просто перебирает files и запускает processFile ну и конечно нода падает по утечке памяти. Я заменил processFile сделал там setTimeout с возвращением resolve() через 5 секунд, сразу увидел, что for цикл не ждет await
источник

NS

Nikolay 🤷🏼‍♀️ Simotiuk in Node.js — русскоговорящее сообщество
Попов Алексей
пробовал for await (...) тоже не то, он не ждет, просто перебирает files и запускает processFile ну и конечно нода падает по утечке памяти. Я заменил processFile сделал там setTimeout с возвращением resolve() через 5 секунд, сразу увидел, что for цикл не ждет await
странно, а если .кетч на трай кетч поменять?
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
Nikolay 🤷🏼‍♀️ Simotiuk
странно, а если .кетч на трай кетч поменять?
Хмм... а не это у меня косяк.....
источник

BB

Bruian Blake in Node.js — русскоговорящее сообщество
А что это за функция processFile?
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
Bruian Blake
А что это за функция processFile?
const processFile = async (folder, file) => {
   return new Promise((resolve, reject) => {
       const input = fs.createReadStream(path.join(folder, file), { encoding : 'utf8' });
       const rl = readline.createInterface({input});
       rl.on('line', async line => await processData(line));
       rl.on('error', _ => err => reject(new Error(err)));
       rl.on('close', _ => resolve());
   });
};
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
т.е. мне надо, чтобы отрабатывалось каждый  rl.on('line', async line => await processData(line)); и после того как все строки обработались, функция rl.on('close', _ => resolve()); отдала и for продолжил цикл, а так получается, что processFile сразу резолвит
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
пробовал
rl.on('line', async line => {
           rl.pause();
           await processData(line);
           rl.resume();
       });
но чет не помогает
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
const processData = async (line) => {
   return new Promise(async (resolve, reject) => {
       console.log('bar');

       setTimeout(()=>{
           resolve();
       }, 3000);

   });
};

const processFile = async (folder, file) => {
   return new Promise((resolve, reject) => {
       const input = fs.createReadStream(path.join(folder, file), { encoding : 'utf8' });
       const rl = readline.createInterface({input});
       rl.on('line', async line => {
           rl.pause();
           await processData(line);
           rl.resume();
       });
       rl.on('error', _ => err => reject(new Error(err)));
       rl.on('close', _ => resolve());
   });
};


будет хреначить в консоле bar не дожиаясь таймаута и resolve()
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
rl.on('line', async line => {
           rl.pause();
           setTimeout(_=>{
               console.log(line);
               rl.resume();
           }, 1000);
       });
вообще сразу выводит line не ждет 1сек
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
Как построчно в потоке читать файл (файл очень огромный), каждая строка обрабатывается (куча регулярок и т.д.) после чего выполняет процедуру из sql и после этого метод должен получить следующую строку. Естественно он мне сейчас в processData(line) хреначит все строки, там метод не успевает все сделать и короче все падает в утечке памяти
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Попов Алексей
const processFile = async (folder, file) => {
   return new Promise((resolve, reject) => {
       const input = fs.createReadStream(path.join(folder, file), { encoding : 'utf8' });
       const rl = readline.createInterface({input});
       rl.on('line', async line => await processData(line));
       rl.on('error', _ => err => reject(new Error(err)));
       rl.on('close', _ => resolve());
   });
};
Зачем async функция возращается промис
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
Sergey 🛸
Зачем async функция возращается промис
чтобы по завершению считывания она делала resolve
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
Sergey 🛸
Зачем async функция возращается промис
это ведь асинхроная операция
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Попов Алексей
чтобы по завершению считывания она делала resolve
Зачем делать resolve?
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
Sergey 🛸
Зачем делать resolve?
так у меня ведь в for вызывается она
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Почему бы не сделать await?
источник

ПА

Попов Алексей in Node.js — русскоговорящее сообщество
Sergey 🛸
Почему бы не сделать await?
так я так и сделал
источник