Как видите, ваша функция занимает всего 6,78 мс до окончания sh, это означает, что функция не дожидается вашего запроса окончательно sh, она просто возвращает объект немедленно. Функция остановится, когда она достигнет return
.
На вашей локальной стороне запрос Mongodb все еще выполняется, когда ваша функция получает return
. Но он не работает на лямбда-стороне, когда функция останавливается, он останавливает весь процесс.
Основная причина в том, что вы смешиваете синтаксис async/await
с синтаксисом callback
для MongoClient
.
await client.connect(clientConnectError => { // does not make sense
Как Mongodb document , вы можете использовать их метод в качестве Обещаний.
"use strict";
module.exports.addNewMenuItem = async event => {
var MongoClient = require('mongodb').MongoClient;
const options = {
socketTimeoutMS: 30000,
keepAlive: true,
reconnectTries: 30000,
useUnifiedTopology: true,
useNewUrlParser: true
};
;
console.log(process.env.MONGO_CONNECTION_STRING)
console.log("eb", event.body)
const { coffee_type, coffee_subtype, business_id } = event.body
const client = new MongoClient(process.env.MONGO_CONNECTION_STRING, options);
try {
await client.connect() // return Promise if no callback passed
await client.db("Coffee2Go").collection("MenuItems").insertOne({ coffee_type, coffee_subtype, business_id })
console.log("added the new menu item successfully")
} catch(err) {
console.log("db error", writeError)
// As your original logic. The error will not effect to result of the function.
// But, I think this is not a good flow, you need tell to your client that process get back an error in this case
return {
"body": JSON.stringify({
message: "Insert item error",
error: err.message
}),
"headers": {
"Access-Control-Allow-Origin": "*"
},
"statusCode": 500 // instead of 200 - success
};
}
return {
"body": "menu item added successfully",
"headers": {
"Access-Control-Allow-Origin": "*"
},
"statusCode": 200
};
};