Airtable иногда возвращает результаты, а иногда нет - PullRequest
1 голос
/ 12 марта 2019

Я использую библиотеку Node.js для связи с AirTable, официальная библиотека js . У меня проблема с filterByFormula. Иногда, когда я пытаюсь найти запись из AirTable, я не получаю результаты, хотя я почти уверен, что должны быть какие-то результаты. Моя логика такова, что если я не нахожу запись в AirTable, я создаю новую. Если я найду его, я обновлю существующий. Эта логика приводит к проблеме с одинаковыми записями, введенными дважды.

Это мой запрос:

getReservationByID: async (externalID) {
    let reservations = await calendarBase('Reservations').select({
      view: 'Main View',
      filterByFormula: `{External ID} = \"${externalID}\"`,
      maxRecords: 1,
    }).all();

    return (reservations.length > 0) ? reservations[0] : null;
},

И эта функция используется так:

let oldReservation = await getReservationByID(reservation.id);
if (!oldReservation) {
  createNewReservation(reservation);
} else {
  updateReservation(reservation);
}

Как видите, мне важно получить запись из AirTable, если она существует, но иногда AirTable не возвращает существующую запись с заданным идентификатором, и тогда я получаю дубликат с тем же внешним идентификатором. Я делаю что-то неправильно или есть какая-то проблема, о которой я не знаю?

1 Ответ

1 голос
/ 13 марта 2019

Мне удалось решить проблему.Я удалил представление из запроса, и теперь все работает.Если представление не включено, Airtable будет искать все записи в таблице, которые соответствуют вашей формуле.Если вы укажете представление, Airtable ограничит свой поиск только этим представлением, а затем найдет все записи, соответствующие вашей формуле.Если у вас есть фильтр для представления, которое вы вводите в select, в моем случае «Main View», то вы, возможно, скрываете определенные записи из своего скрипта.

Мой новый запрос выглядит так:

getReservationByID: async (externalID) {
    const reservations = await calendarBase('Reservations').select({
      filterByFormula: `{External ID} = \"${externalID}\"`,
      maxRecords: 1,
    }).all();

    return (reservations.length > 0) ? reservations[0] : null;
},
...