AWS lambda returning undefined instead of the value

I am trying to listen for events on the polygon blockchain, I am new to JavaScript and don’t quite understand how promises work.I have a module that reads from the blockchain, which does give me the correct answer with a setTimeout function, however, if I do the same thing from the aws export.handler I get undefined. Anyone can help me with this?

My blockChainScanner code:
async function Scanner(callback){

let options = {

    fromBlock:24262239,                  //Number || "earliest" || "pending" || "latest"

    toBlock: 'latest'

};

BreedContract.getPastEvents(

    'JoinBreedListEvent',

    options

)

.then(events => {

     if(events.length != 0) {

        //need a for loop to iterate over all events

        callback( events[0].returnValues.id);

     }

     else{

         console.log("No event to Display")

     }

     //console.log(TokenID);

})

.catch(err => {

    console.log(err);

})

}

async function main(){

const result = Scanner(response =>{

    exports.ID = response;

    console.log(exports.ID);

})

}

exports.main = main;

main()

My code for AWS lambda:

const AWS = require(‘aws-sdk’);

AWS.config.update({ region: “us-east-1”});

//let dynamodbLambda = new AWS.Lambda({region: “us-east-1”})

let BCScanner = require("./blockChainScanner");

console.log(“Token ID:” + BCScanner.ID);

exports.handler = async function(event, context, callback) {

let result = await BCScanner.main()

.then(() =>{

    setTimeout(() =>{

        console.log("Token ID:" + BCScanner.ID);

        return BCScanner.ID;

    },5000)

})

};

1 Like