Кажется, не могу вернуться от обещания поймать - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь заполнить список меню из своей базы данных PouchDB, но я не могу ничего вернуть из обещания, которое я вызываю после вызова get on the db.

Вот мой код:

<MenuList>
   {this.populateSavedClues()}
</MenuList>
.
.
.
populateSavedClues() {
    var db = this.db;
    db.get('roomClues').then(function (doc) {
        if (doc.clues == null || doc.clues == array()) {
          return <MenuItem onClick={() => this.handleClose()} align='start' size='small' >You have no saved clues for this room</MenuItem>;
        }
        else {
          return doc.clues.map((clue) => <MenuItem onClick={() => this.selectClue(clue)} align='start' size='small' >{clue}</MenuItem>);
        }
    }).catch(function (err) {
        if(err.name=="not_found") {
          return <MenuItem onClick={() => this.handleClose()} align='start' size='small' >You have no saved clues for this room</MenuItem>;
        }
    });
  }

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

1 Ответ

0 голосов
/ 26 ноября 2018
renderMenu() {
        let jsx;
        if (this.state.clues.length == 0) {
            jsx = <MenuItem onClick={() => this.handleClose()} align='start' size='small' >You have no saved clues for this room</MenuItem>
        } else {
            jsx = this.state.clues.map((clue) => {
                return <MenuItem onClick={() => this.selectClue(clue)} align='start' size='small' >{clue}</MenuItem>
            })
        }

        return jsx;
    }

    async populateSavedClues() {
        var db = this.db;
        try {
            const doc = await db.get('roomClues');
            return doc;         

        } catch (error) {
            alert('Error fetching clues...')
        }
    }



async componentDidMount() {

        const doc=  await this.populateSavedClues();

        this.setState({ clues: doc.clues });
    }

В вашем JSX:

<MenuList>
   {this.renderMenu()}
</MenuList>

Не забудьте поместить свойство "ключи" (пустой массив) в ваше состояние.Надеюсь, это поможет.

...