0

我正在研究 Airtable API 集成,但我对这种事情还是完全陌生......我正在将所有记录拉到特定视图中,对数据进行处理,然后更新所有复选框字段那些记录是真实的。问题是 Airtable 将其 api 限制为 5 次调用/秒,而且我不完全确定我是否正确发送数据。

function update_record(record_id) {
  $.ajax({
    url: 'https://api.airtable.com/v0/myAirtableBase/Table/' + record_id,
    headers: {
      'Authorization': 'Bearer apikey'
    },
    method: 'PATCH',
    data: {
      'fields': {
        'Checkbox Field': true
      }
    },
    success: function() {
      console.log('it worked! I think');
    },
    error: function() {
      console.log('nope');
    }
  });
}

$('#check_printed_button').click(function() {
  var time = 0;
  $('.record-name').each(function() {
    var record_id = $(this).data('recordId');

    setTimeout(update_record(record_id, time), time);
    time += 250;
  });
});

在此之前,我将打印出表中的每条记录,其 id 位于数据属性中。

我的网络窗格显示,我收到了所有选项请求,返回 200,但在最后几个返回之前,我收到返回“429 Too Many Requests”的请求方法。我试图通过 setTimeout 来避免这种情况,并将调用错开 0.25 秒,但这显然行不通。然后我又得到了几个 200 状态,然后是另一个 429,然后是几个 200,然后又是几个 429,然后我返回每个 PATCH 请求,状态为“422 不可处理条目”。这些响应显示类型:'INVALID_VALUE_FOR_COLUMN',消息:'字段(复选框字段)不能接受值 true'。

帮帮我?真的不知道下一步该去哪里。如果这真的是我需要的地方,我完全愿意放弃这个并学习使用官方 node.js 客户端的到底是什么节点。

4

1 回答 1

0

这是处理我发现有效的复选框的一种非常简单的方法。

至于 Records 情况是的,请使用 Node.js 客户端和 airtable.js npm 包。然后使用/构建一个 API 代理来从表中提取所有记录,具体取决于 Airtable 自身的大小。

/* Checkbox
 * A single checkbox that can be checked or unchecked.
 * Parameters:
 *   name: <String>
 *   value: <Boolean>
 *     default: false
 *     Setting this field to 0, '0', undefined, or null will set it to false.
 *     Setting this field to 1 or '1' will set it to true.
 * Strict: value must be a Boolean. Numbers will throw an error.
 */

class Checkbox extends Field {
  constructor(name, value = false, config) {
    super(name, value, config);
    this.type = 'Checkbox';
  }

  /* get value
   * Return: <Boolean>
   *   Whether or not the checkbox is checked.
   */

  get value() {
    return this._value === true;
  }

  /* set value
   * Parameters:
   *   value: <Boolean>
   *     Whether or not the checkbox is checked.
   *     undefined or null will be set to false.
   *     '0' or 0 will be set to false.
   *     '1' or 1 will be set to true.
   */

  set value(value) {
    if (value === undefined || value === null)
      return this._value = false;
    if (this.isStrict && typeof value !== 'boolean')
      return this._error(`'value' must be a boolean.`, value);
    if (`${value}` === '0' || `${value}` === '1')
      value = !!Number(value);
    if (typeof value !== 'boolean')
      return this._error(`'value' must be a boolean.`, value);
    this._value = value;
  }
}

module.exports = Checkbox;
于 2018-08-25T08:13:23.023 回答