Отклонение необработанного обещания (оценка ‘result.offset’)

#javascript #reactjs

#javascript #reactjs

Вопрос:

Привет, я работаю с этим внешним API, он не позволит мне сохранить массив, он продолжает сбой и отправляет эту ошибку

Отклонение необработанного обещания: ошибка типа: неопределенный не является объектом (оценка ‘result.offset’)]

   componentDidMount() {
    this.retrieveData(true);
    var Airtable = require("airtable");
    var base = new Airtable({ apiKey: "xxxxxxxx" }).base(
      "ooooooooo"
    );
    var list = [];
    base("Hardware Display")
      .select({
        maxRecords: 99,
        view: "Grid view",
      })
      .eachPage(
        function page(records, fetchNextPage) {
          records.forEach(function (record) {
            console.log(record.get("Name"));
            list.push({
              label: record.get("Name"),
              value: record.get("Name"),
              key: record.get("Name"),
            });
          });
          fetchNextPage();
        },
        function done(err) {
          console.log("done");
          console.log("this.state.ATdisplays :", this.state.ATdisplays);
          console.log("list :", list);
          this.setState({ ATdisplays: list });
          if (err) {
            console.error(err);
            return;
          }
        }
      );
  }
  

Проблема здесь

 list.push({
              label: record.get("Name"),
              value: record.get("Name"),
              key: record.get("Name"),
            });
  

как только я прокомментирую это все гладко и перейду к следующей странице, я, похоже, не могу сохранить этот массив

Я не понимаю эту проблему

 Stack trace:
  node_modules/airtable/node_modules/lodash/_baseIsEqual.js:22:6 in baseIsEqual
  node_modules/airtable/node_modules/lodash/_baseClone.js:29:14 in <global>
  node_modules/promise/setimmediate/core.js:37:14 in tryCallOne
  node_modules/promise/setimmediate/core.js:123:25 in setImmediate$argument_0
  node_modules/react-native/Libraries/Core/Timers/JSTimers.js:146:14 in _callTimer
  node_modules/react-native/Libraries/Core/Timers/JSTimers.js:194:17 in _callImmediatesPass
  

Комментарии:

1. Замените «проблемную» часть чем-то статичным, например list.push({label: 'test'}) . Это покажет, что проблема либо в .get методе, либо нет. Установка массива объектов в состояние выполнима на 100%, поэтому мы знаем, что это не так. Моя интуиция подсказывает мне, что это как-то связано с тем, как обрабатываются записи во время попытки установить состояние.

Ответ №1:

Проблема заключалась в этой переменной, не удалось использовать внутри promise, поэтому я заменил ее на self

 var self = this
self.setState({ ATdisplays: list });