Reputation: 176
I have implemented a simple db call here
This works and output is success
const Database = require('../utils/Database')
module.exports.logActivityLog = (event, context, callback) => {
try {
context.callbackWaitsForEmptyEventLoop = false
const db = new Database('config1')
var p1 = db.findOne('logs', { id: 1 })
var p2 = db.findOne('logs', { id: 1 })
Promise.all([p1, p2]).then((values) => {
console.log(db.getConnection().threadId)
console.log('values', values)
callback(null, 'success')
}).catch((e) => {
console.log(e)
callback(null, 0)
})
} catch (error) {
console.log(error)
callback(null, 'error')
}
}
Now, if I use async
for handler it always gives output as null
, although my promiss.all.then
's console.log
works.
module.exports.logActivityLog = async (event, context, callback) => {
//exactly same as above
}
I need the 2nd approach to work. Am I doing something wrong here?
Upvotes: 1
Views: 1977
Reputation: 53
You can do this
const Database = require('../utils/Database')
module.exports.logActivityLog = async (event, context, callback) => {
try {
context.callbackWaitsForEmptyEventLoop = false
const db = new Database('config1')
var p1 = await db.findOne('logs', { id: 1 })
var p2 = await db.findOne('logs', { id: 1 })
console.log(db.getConnection().threadId)
console.log('values', p1, p2)
callback(null, 'success')
} catch (error) {
console.log(error)
callback(null, 'error')
}
}
Or if you want the db operations to run in parallel try this
var [p1, p2] = [
await db.findOne('logs', { id: 1 }),
await db.findOne('logs', { id: 1 })
]
Upvotes: 2
Reputation: 2218
When using async/await
you should await
your promises:
const Database = require('../utils/Database')
module.exports.logActivityLog = async (event, context, callback) => {
try {
context.callbackWaitsForEmptyEventLoop = false
const db = new Database('config1')
var p1 = db.findOne('logs', { id: 1 })
var p2 = db.findOne('logs', { id: 1 })
try {
const values = await Promise.all([p1, p2])
console.log(db.getConnection().threadId)
console.log('values', values)
callback(null, 'success')
} catch (e) {
console.log(e)
callback(null, 0)
}
} catch (error) {
console.log(error)
callback(null, 'error')
}
}
Upvotes: 0