首先,让我从我想要实现的目标开始。我想查询 Airtable 中的一个表,其中包含来自链接表的数据。Airtable 返回链接表中记录的 ID,因此我需要对每条记录进行第二次查找以获取我想要的数据(例如Name
)。最终,我想将链接记录中的 ID和其他字段返回给客户端。问题是,由于 API 的异步性质和我缺乏理解,我未能实现这一点。
到目前为止,我能做的最好的事情就是在done()
他们的 API 回调中执行一些代码。问题是这是不可扩展的,因为这意味着我会让自己陷入回调地狱。(至少,这是我认为到目前为止我能够确定的。)
这是我的代码(仅供参考,这是要在 Azure 函数中运行的代码):
var Airtable = require("airtable");
var airtableApiKey = process.env.airtableApiKey;
module.exports = function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
var base = new Airtable({
apiKey: airtableApiKey
}).base('appBASEID');
var resultObj;
var accumulator = [];
base('Products').select({
sort: [{
field: 'Identifier',
direction: 'asc'
}]
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function (record) {
context.log('Retrieved ', record.get('Identifier'));
context.log('Retrieved ', record.get('Vendor'));
accumulator.push(record._rawJson);
// base('Vendors').find(record.get('Vendor')[0], function( err, record) {
// if (err) { context.error(err); return; }
// context.log(record.get('Name'));
// });
});
fetchNextPage();
}, function done(error) {
context.res = {
// status: 200, /* Defaults to 200 */
body: JSON.parse(JSON.stringify(accumulator))
};
context.done();
});
};
您可以看到我在该.eachPage()
部分中评论了一些行,因为正如我在处理此问题时所了解到的那样,该代码没有按照我预期的顺序执行。
我怎样才能foreach
通过accumulator
和.find()
我需要的记录?