#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 });