I am trying to do something that I just can't wrap my head around, I have tried doing something with promises but still get stuck. I tried reading through this and still am stuck How do I return the response from an asynchronous call?
What I need to do is run the following code and get the body outside of the req, so I can check if it is succesful and send a response in a lambda with a 200 and a message from the body. I don't want to return the 200 status inside the function because I need to also check if a fetch request is succesful before sending the 200 status with a body back.
Hopefully someone can help with this
let statusTrue
const req = https.request(options, function(res) {
 res.setEncoding("utf8")
 res.on("data", function(body) {
   console.log(`Body: ${body}`)
   statusTrue = body.status
  })
})
 if (statusTrue) {
    return {
      statusCode: 200,
      headers: {
        "Access-Control-Allow-Origin": "*",
      },
      body: JSON.stringify({ email: true }),
    }
  } else {
    return {
      statusCode: 200,
      headers: {
        "Access-Control-Allow-Origin": "*",
      },
      body: JSON.stringify({ email: false }),
    }
  }
Update Heres my code with oswins answer, the full code for context. Right now the function fires after the handler finishes so I never am able to send a proper response back.
const sgMail = require("@sendgrid/mail")
require("dotenv").config()
const { SENDGRID_API_KEY, SENDGRID_TO_EMAIL } = process.env
const URL = require("url")
const https = require("https")
const fetch = require("node-fetch")
exports.handler = async (event, context) => {
  try {
    //console.log(JSON.parse(event.body))
    //*** send off to google to verify captcha */
    const body = JSON.parse(event.body)
    let secret = "fdsf"
    const fetchUrl = `https://www.google.com/recaptcha/api/siteverify?secret=${secret}&response=${body.captcha}&remoteip=${event.headers["client-ip"]}`
    let isItTrue
    await fetch(fetchUrl, {
      method: "POST",
      body: JSON.stringify({ message: "hello world" }),
      headers: { "Content-Type": "application/json" },
    })
      .then(response => response.json())
      .then(data => {
        isItTrue = data.success
      })
      .catch(error => {
        console.error("Error:", error)
      })
    //console.log(isItTrue)
    //*** end */
    //*** Running Form Sends Now if Captcha Valid */
    if (isItTrue) {
      //*** Zapier Send */
      const webhook_url = URL.parse(
        "https://hooks.zapier.com/hooks/catch/fds"
      )
      const options = {
        hostname: webhook_url.hostname,
        path: webhook_url.pathname,
        method: "POST",
        headers: { "Content-Type": "application/json" },
      }
      // Set up webhook request
      const req = https.request(options, function(res) {
        res.setEncoding("utf8")
        res.on("data", function(body) {
          console.log(`Body: ${body}`)
          sendResponse(body.status)
        })
      })
      // Handle webhook request error
      req.on("error", function(e) {
        const errorMessage = `[ERROR] Problem with request: ${e.message}`
        console.log(errorMessage)
        callback(e.message, {
          statusCode: 400,
          body: errorMessage,
        })
      })
      // Send form data to webhook request and end request
      req.end(JSON.stringify(body.data))
      //*** End */
      //console.log(zapierStatus)
      const sendResponse = statusTrue => {
        if (statusTrue === "success") {
          return {
            statusCode: 200,
            headers: {
              "Access-Control-Allow-Origin": "*",
            },
            body: JSON.stringify({ email: true }),
          }
        } else {
          return {
            statusCode: 200,
            headers: {
              "Access-Control-Allow-Origin": "*",
            },
            body: JSON.stringify({ email: false }),
          }
        }
      }
    } else {
      return {
        statusCode: 200,
        headers: {
          "Access-Control-Allow-Origin": "*",
        },
        body: JSON.stringify({ captcha: false }),
      }
    }
    //*** end */
  } catch (err) {
    return { statusCode: 500, body: err.toString() }
  }
}
 
     
    