Для каждого значения цикла, не отправляемого в последующую функцию. Что здесь происходит? Node.js

Я работаю над этим проектом уже три дня, и я почти дошел до того, что понимаю все, что я делаю, и почему значение выдает ошибку, но в этом коде:

function updateStats(){
    const users = readFile('users','txt','UTF-8');
    users.forEach((v) => {    
        console.info(v);
        var user =  v.toString();
        const statFile = readFile(user,'txt','UTF-8');
        readHTTP(v,currentChannel,statFile[0]);
    });
}

Выдает ошибку:

I am doing my 15 minutes update
610636905440215071
677257430249242655
539899963568553986
525819952708583427
373982165307752460

Error: ENOENT: no such file or directory, open '/Users/codel/OneDrive/Documents/BattlEye/files/.txt'
    at Object.openSync (fs.js:476:3)
    at Object.readFileSync (fs.js:377:35)
    at readFile (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:98:25)
    at C:\Users\codel\OneDrive\Documents\BattlEye\index.js:214:26
    at Array.forEach (<anonymous>)
    at updateStats (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:211:11)
    at Timeout._onTimeout (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:27:3)
    at listOnTimeout (internal/timers.js:554:17)
    at processTimers (internal/timers.js:497:7) {
  errno: -4058,
  syscall: 'open',
  code: 'ENOENT',
  path: '/Users/codel/OneDrive/Documents/BattlEye/files/.txt'
}
C:\Users\codel\OneDrive\Documents\BattlEye\index.js:215
        readHTTP(v,currentChannel,statFile[0]);
                                          ^

TypeError: Cannot read property '0' of undefined
    at C:\Users\codel\OneDrive\Documents\BattlEye\index.js:215:43
    at Array.forEach (<anonymous>)
    at updateStats (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:211:11)
    at Timeout._onTimeout (C:\Users\codel\OneDrive\Documents\BattlEye\index.js:27:3)
    at listOnTimeout (internal/timers.js:554:17)
    at processTimers (internal/timers.js:497:7)

Я предполагаю, что это как-то связано со структурой функции, но другие мои циклы foreach отлично работают в этом синтаксисе. Может ли кто-нибудь помочь отладить это?

Редактировать: Прочитать файл:

function readFile(fileName,fileType,fileFormat){
    try {
        const data = fs.readFileSync('/Users/codel/OneDrive/Documents/BattlEye/files/'+fileName+'.'+fileType, fileFormat);
        const lines = data.split(/\r?\n/);
        return lines;
    } catch (err) {
        console.error(err);
    }
}

Читатьhttp:

function readHTTP(user,cc,userID){
    const puppeteer = require('puppeteer');
    var url= 'https://r6.tracker.network/profile/pc/' + userID;
    (async() => {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        try {
        await page.goto(url);
        } catch(error){
            cc.send('You did not enter a valid Ubisoft UserID');
        }
        const data = await page.evaluate(() => {
            return Array.from(document.querySelectorAll('.trn-defstat__value'))
                    .map(item => item.innerText);
        }); 
        writeStatFile(user,userID,data);
        console.info("Personal stats file was written");
    })();
}

Я только что выучил этот язык два дня назад, но значение не проходит через цикл for each в последующую функцию.

Похоже, что он не может прочитать файл users, вы не можете запустить forEach() на users. Проверьте имя файла, который вы пытаетесь прочитать.

Ozgur Sar 14.12.2020 20:45

@Ozgur Sar Я добавил правку с полным журналом. Он читает user.txt, но при поиске файла user.txt значение не отправляется. Полный журнал показывает, что console.info(v) выводит нужные мне значения.

BaccaRuler MC 14.12.2020 20:59

Пожалуйста, выложите код readFile (и, возможно, readHTTP), без этого мы не сможем вам помочь.

Bergi 14.12.2020 21:11

Используйте отладчик и проверьте значение v/user. Моя ставка: ваш users.txt заканчивается новой строкой, а последний v — это пустая строка.

Bergi 14.12.2020 21:12

@ Берги, я думаю, ты прав. То, как я читаю файл, относится к разделению каждой строки. Ты был прав. Это было просто незахваченное пустое пространство.

BaccaRuler MC 14.12.2020 21:16

Ах, мой хрустальный шар все еще работает :-) Кстати, вы также должны опустить catch (err) { console.error(err); }. Это заставляет вашу функцию возвращать undefined, с чем вызывающая сторона не хочет иметь дело. Не используйте try/catch в функции, если вы не можете обработать ошибку.

Bergi 14.12.2020 21:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

ошибка: -4058, системный вызов: «открыть», код: 'ЭНОЕНТ', путь: '/Users/codel/OneDrive/Documents/BattlEye/files/.txt' <-- Я думаю, что ошибка возникает из-за этого...

Хорошей причиной для поиска являются проблемы с асинхронностью.

попробуй это:

const promises = require('fs').promises

const updateStats = async () => {
  try {
    const users = await promises.readFile('users.txt', {encoding: 'utf8'});
    for (let user of users.split("\n")) {
      const statFile = await promises.readFile(user.toString() + '.txt', {encoding: 'utf8'});

      if (statFile && statFile[0]) {
        readHTTP(user,currentChannel,statFile[0]);
      }
    }
  } catch(err) {
    console.error(err.toString())
  }
}

Не уверен, что это сработает, так как у меня не было времени проверить это.

Очень надеюсь, что это поможет :)

Ответ принят как подходящий

Почти полностью уверен, что у вас есть пустая новая строка в users.txt

Я бы сделал следующее:

function updateStats(){
    const users = readFile('users','txt','UTF-8');
    users.forEach((v) => {
        if (v === '') return
        console.info(v);
        var user =  v.toString();
        const statFile = readFile(user,'txt','UTF-8');
        readHTTP(v,currentChannel,statFile[0]);
    });
}

Другие вопросы по теме