Javascript, localForage, передача массива между литералами объекта с помощью getter - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть следующие литералы объекта, в которых я пытаюсь передать массив todoList между объектом хранилища (используя localForage) и объектом представления.

const store = {
  setUpStore() {
    this.todos = localforage.createInstance({
      name: 'myApp',
      storeName: 'todos'
    });
    this.completed = localforage.createInstance({
      name: 'myApp',
      storeName: 'completed'
    });
  },

// Code omitted for brevity

  get todoList() {
    const todoList = [];
    this.todos.iterate((value, key, iterationNumber) => {
      let item = {id: key, title: value.title};
      if (value.prioritized === true) {
        todoList.unshift(item);
      } else {
        todoList.push(item);
      }
    }).then(() => {
      console.log('Got todo list');
    }).catch((err) => {
      console.log(`There was an error: ${err}`);
    });
    return todoList;
  },
}

const view = {
  // Code omited for brevity

  displayTodos() {
    todoList = store.todoList;
    console.log(todoList); // This logs what appears to be an array
    todoList.forEach((item) => {
      // This doesn't work
      console.log(item.title);
    });
  }
}

Когда я вызываю store.todoListgetter в консоли, я получаю массив, с которым я могу работать.Кажется, что console.log (todoList) в методе view.displayTodos () работает, но вызов forEach () или выполнение каких-либо других операций с массивами для todoList в методе view не работает.Что здесь происходит?

1 Ответ

0 голосов
/ 20 сентября 2018

первый метод должен быть таким:

get todoList() {
    const todoList = [];
    return this.todos.iterate((value,id) =>{
        let item = { id, title: value.title};
        if (value.prioritized === true) {
            todoList.unshift(item);
        } else {
            todoList.push(item);
        }
    }).then(() => {
        console.log('Got todo list');
        return todoList
    }).catch((err) => {
        console.log(`There was an error: ${err}`);
    });
},

внутри 'then', я возвращаю то, что мне действительно нужно, массив, внутри Promise.Второй метод должен выглядеть примерно так:

displayTodos() {
    store.todoList.then(arr=> arr.forEach((item) => {
        console.log(item.title);
    }))
}    

результат, который я использую, - это Promise, поэтому мне нужно работать внутри 'then', чтобы увидеть массив

...