Как я могу передать массив от одной функции к другой в классе? - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь настроить приложение для создания заметок, используя Node и Express. Прямо сейчас любая сохраненная заметка перезаписывает то, что находится в файле db. json. Я пытаюсь записать то, что уже есть в БД. json, в пустой массив, записать самую последнюю заметку, а затем записать файл, используя этот последний массив. У кого-нибудь есть какие-либо советы о том, что я делаю здесь неправильно? Спасибо.

  read() {
    return readFileAsync(path.join(__dirname, "db.json"), "utf8");
  }

  write(note) {
    return writeFileAsync(path.join(__dirname, "db.json"), JSON.stringify(note))
  }

  getNotes() {
    return this.read().then(notes => {
      var notesObject = JSON.parse(notes);
    });
  }

  addNote(note) {
    const newNoteArray = [];
    const { title, text } = note;
    if (!title || !text) {
      throw new Error("Note 'title' and 'text' cannot be blank");
    }
    const newNote = { title, text, id: uuidv1() };;
    return this.getNotes()
      .then(notes => {
        newNoteArray.push(notes);;
      })
      .then(newNoteArray.push(newNote))
      .then(this.write(newNoteArray));
  }

Ответы [ 2 ]

1 голос
/ 04 мая 2020

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

 addNote(note) {

    const { title, text } = note;
    if (!title || !text) {
      throw new Error("Note 'title' and 'text' cannot be blank");
    }
    const newNote = { title, text, id: uuidv1() };
    return this.getNotes()
      .then(notes => {
        notes.push(newNote);
        return this.write(notes);
      })
  }

Вам не нужно then для простых синхронных действий, таких как помещение элемента в массив. Вам нужно then только для обещаний.

0 голосов
/ 04 мая 2020

Не видя содержимого вашей функции writeFileAsync, я не могу дать вам точного ответа, но проблема в том, что вы, скорее всего, перезаписываете содержимое файла, а не добавляете его. ознакомьтесь с кратким руководством по написанию и добавлению содержимого в файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...