Netlify functions are a powerful beast for all your API needs. But what if I want to return as soon as possible from my API call to keep my web UI responsive, but still need to do something like sending out an e-mail? Enter the "classic" function style that makes this possible.
https://docs.netlify.com/functions/overview/ can be used used to provide a API for your web site. You can buid your functions with JavaScript.
There are two common ways to write your Netlify function. The "modern" style and the "legacy" style:
// modern JS style - encouraged export async function handler(event, context) { return { statusCode: 200, body: JSON.stringify({ message: `Hello world ${Math.floor(Math.random() * 10)}` }) }; } // legacy callback style - not encouraged anymore, but you'll still see examples doing this exports.handler = function(event, context, callback) { // your server-side functionality callback(null, { statusCode: 200, body: JSON.stringify({ message: `Hello world ${Math.floor(Math.random() * 10)}` }) }); }; I would encourage you to use the modern style, except when you want to return a result as soon as posible, but continue processing in the function. This can only be done with the legacy style, as follows:
function continueAfterDoneTest.js:
function getTime() { return (new Date()).toISOString().substr(11, 8); } exports.handler = (event, context, callback) => { console.log(`${getTime()}: THE FUNCTION HAS STARTED`); setTimeout(function () { console.log(`${getTime()}: THE TIMEOUT IS COMPLETED`) }, 5000); callback(null, { statusCode: 200, body: `${getTime()}: FUNCTION COMPLETED` }); }; Function output in the terminal:
◈ Creating Live Tunnel for 8ddb4b97-be43-46aa-855c-0d05999a8ec9 ┌────────────────────────────────────────────────────────────┐ │ │ │ ◈ Server now ready on https://idnv-3ea026.netlify.live │ │ │ └────────────────────────────────────────────────────────────┘ Request from ::1: GET /.netlify/functions/continueAfterDoneTest 12:40:00: THE FUNCTION HAS STARTED Response with status 200 in 8 ms. 12:40:05: THE TIMEOUT IS COMPLETED Output in the browser at url https://idnv-3ea026.netlify.live/.netlify/functions/continueAfterDoneTest:
12:40:00: FUNCTION COMPLETED You will see this output in the browser directly, while the last line in the terminal output comes 5 seconds later.
Top comments (0)