一次更新多个Airtable记录中的字段

时间:2018-02-05 05:10:04

标签: javascript jquery node.js ajax airtable

我正在进行Airtable API集成,我仍然对这种事情全新......我在特定视图中提取所有记录,对数据进行处理,然后更新复选框所有这些记录的字段为true。问题是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避免这种情况,并将调用错开了.25s,但这显然无法正常工作。然后我再获得200个状态,然后是另外429个,然后是几个200个,然后是几个429个,然后我返回每个PATCH请求返回状态为“422 Unprocessable Entry”。对这些的响应显示类型:'INVALID_VALUE_FOR_COLUMN',消息:'字段(复选框字段)不能接受值true'。

帮帮我吧?真的不知道下一步该去哪里。我完全愿意废弃这个,并了解使用official node.js client的heck节点是什么,如果那真的是我需要的地方。

1 个答案:

答案 0 :(得分:0)

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

关于记录情况,是的,请使用Node.js客户端和airtable.js npm软件包。然后根据Airtable自身的大小,使用/构建API代理从表中获取所有记录。

/* 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;