Я пытаюсь выполнить массовую вставку данных на сервер sql с помощью лямбды, код вставляет данные только для первого аргумента, предоставленного для обещания. Все, при попытке запустить код в автономном режиме, используя без сервера, все работает нормально.
module.exports = async (context, event, callback) => {
let bulkInsert = async (table, db) => {
return new Promise(async function (resolve, reject) {
const request = null;
try {
console.log("Bulk inserting data")
const request = await db.request();
try {
var result = await request.bulk(table);
console.log(result)
resolve(result)
} catch (err) {
console.log(err);
reject(err)
}
} catch (err) {
console.log("Error Occured while inserting data.")
console.log(err)
reject(err)
}
});
};
//Read file from S3
var file = s3.getObject(params).createReadStream();
var buffers = [];
try {
//Get the metadata for the object
let s3Header = await s3.headObject(params)
.promise()
let db;
let insertedTaskID;
try {
db = await new sql.ConnectionPool(config).connect();
} catch (err) {
console.error("Connection failed: " + err);
throw err;
}
file.on("data", function (data) {
buffers.push(data);
});
file.on("end", async function () {
var buffer = Buffer.concat(buffers);
var workbook = xlsx.parse(buffer);
console.log("No of sheets in workbook are:", workbook.length);
console.log("Remaining Execution Time ", context.getRemainingTimeInMillis())
console.log("Validation Completed ")
let firstTableData = getData("10002", workbook, "0")
let secondTableData = getData("10002", workbook, "1")
let thirdTableData = getData("10002", workbook, "2")
let fourthTableData = getData("10002", workbook, "3")
console.log("Inserting rows to DB")
//Bulk insert the data into respective tables
try {
await Promise.all([
bulkInsert(firstTableData, db),
bulkInsert(secondTableData, db),
bulkInsert(thirdTableData, db),
bulkInsert(fourthTableData, db)
]).catch(err => {
console.log("Error on Bulk Insertion ")
console.log(err)
})
console.log("Completed Insertion")
} catch (err) {
console.log("Bulk Insert Failed")
console.log(err)
}
}
});
callback(null, "OK");
} catch (err) {
console.log(err)
callback(err);
}
};
Вот лямбда-логи, запрос заканчивается перед вставкой в другие таблицы.
08:26:42
2019-07-06T08:26:42.266Z da7e5fd0-acf9-48f0-8dfc-5a2ac712f035 INFO Bulk inserting data
08:26:42
2019-07-06T08:26:42.266Z da7e5fd0-acf9-48f0-8dfc-5a2ac712f035 INFO Bulk inserting data
08:26:42
2019-07-06T08:26:42.287Z da7e5fd0-acf9-48f0-8dfc-5a2ac712f035 INFO Bulk inserting data
08:26:42
2019-07-06T08:26:42.287Z da7e5fd0-acf9-48f0-8dfc-5a2ac712f035 INFO Bulk inserting data
08:26:42
2019-07-06T08:26:42.387Z da7e5fd0-acf9-48f0-8dfc-5a2ac712f035 INFO { rowsAffected: 3 }
08:26:42
END RequestId: da7e5fd0-acf9-48f0-8dfc-5a2ac712f035