Я новичок в Javascript и только знакомлюсь с обещаниями, так что прости мое невежество.
Что я пытаюсь сделать, это запросить все записи из базы Airtable и отфильтровать их на основе флажканазывается "Email Sent", будучи неотправленным.Когда у меня отфильтрованы записи, есть связанные записи в 2 полях, для которых мне нужно выполнить дополнительные запросы, чтобы получить значения.Все эти значения (различные данные и получатели в виде объекта) затем вставляются в шаблон электронной почты в формате HTML и запускаются с помощью AWS-SES.Затем для этих записей устанавливается флажок «Отправлено по электронной почте», чтобы сообщения электронной почты не отправлялись несколько раз.Планируется, что все это будет работать с интервалом в AWS Lambda.И когда записи добавляются в базу, они автоматически отправляются в список по электронной почте.
Я могу получить записи и отфильтровать их.Мне также удобно выполнять код в Lambda и использовать SES.Но я боролся в течение нескольких дней, чтобы получить значения для связанных записей.Оба из них являются списками людей, а 1 - адресом электронной почты получателя.
Множество вещей, которые я пробовал, заканчиваются тем, что либо возвращают исходную запись, вызванную на первом шаге, либо возвращают неопределенное.У меня много обещаний, и я не думаю, что делаю это правильно, потому что кажется, что они выходят из строя.Я также собираюсь попробовать странные вещи, такие как использование глобального массива вместо объекта, который я передаю через обещания и обновления.
Любая помощь приветствуется.Заранее спасибо.
var Airtable = require('airtable');
var base = new Airtable({apiKey: 'xxxxxxxxxx'}).base('xxxxxxxxxx');
var nodemailer = require("nodemailer")
var handlebars = require('handlebars');
const path = require('path');
var AWS = require("aws-sdk")
var ses = new AWS.SES();
var fs = require('fs');
var mainArray = [];
var readHTMLFile = function(path, callback) {
fs.readFile(path, {encoding: 'utf-8'}, function (err, html) {
if (err) {
throw err;
callback(err);
}
else {
callback(null, html);
}
});
};
function getRecords(){
return new Promise(function(resolve, reject) {
var reqArr = [];
base('Edit Requests').select({
// Selecting the first 3 records in Grid view:
maxRecords: 50,
view: "Grid view"
}).eachPage(function page(records, fetchNextPage) {
// This function (`page`) will get called for each page of records.
records.forEach(function(record) {
// console.log("108: ", record._rawJson.id)
var obj = {}
// obj = record.fields;
// obj.id = record._rawJson.id;
console.log("172", record.fields["Editor Preference"])
obj = record.fields;
obj.id = record._rawJson.id;
if(record.fields["Editor Preference"] != undefined){
obj["Editor Preference"] = obj["Editor Preference"]
// obj["Editor Preference"] = getEditorWrap(record.fields["Editor Preference"])
} else {
obj["Editor Preference"] = "";
}
if(record.fields["Production Manager"] != undefined){
obj["Production Manager"] = obj["Production Manager"]
} else {
obj["Production Manager"] = "";
}
mainArray.push(obj)
// console.log(record.fields["Email"])
// console.log('Retrieved', record.fields['Requested By']);
})
// To fetch the next page of records, call `fetchNextPage`.
// If there are more records, `page` will get called again.
// If there are no more records, `done` will get called.
fetchNextPage();
// console.log("123", reqArr)
// resolve(reqArr)
}, function done(err) {
if (err) { console.error(err); return; }
// console.log("123", mainArray)
resolve(mainArray)
});
// resolve(reqArr)
});
}
function filterRecords(arr){
return new Promise(function(resolve, reject) {
var filtered = []
mainArray = [];
// console.log("245", arr)
for (i in arr){
if(arr[i]['Email Sent'] == undefined){
// console.log("247", arr[i])
mainArray.push(arr[i])
};
}
console.log("filtered: ", mainArray)
resolve(mainArray)
});
}
function setObject(array){
return new Promise(function(resolve, reject) {
for (i in array){
var obj = array[i];
if(obj.id != undefined){
base('Editors').find(obj.id, function(err, record) {
if (err) { console.error(err); return; }
// console.log("281", record.fields);
});
}
}
resolve(mainArray)
});
}
function main1(){
return new Promise(function(resolve, reject) {
getRecords().
then(function(recordArr){
filterRecords(mainArray).
then(function(resultArr){
setObject(mainArray).
then(function(mainArray){
})
})
})
});
}
main1().
then(function(resultArray){
console.log(resultArray)
})