Estoy trabajando en una función sin servidor que se alojará en Netlify para suscribir a los usuarios a una lista de correo electrónico de Mailchimp.
Recibo el siguiente error oscuro:
lambda response was undefined. check your function code again
Aquí está mi función:
const handler = async function (event, context) { try { let body = JSON.parse(event.body); mailchimp.setConfig({ apiKey: 'XXXXXXXXX', server: 'us20', }); const submit = async () => { const response = await mailchimp.lists.addListMember("XXXXXXXX", { email_address: body.email.toLowerCase(), status: 'subscribed' }); if (response.errors !== undefined && response.errors.length) { throw new Error(response.errors); } } submit().then(response => { console.log(response); return { statusCode: 200, body: JSON.stringify({ response }), } }).catch(errors => { return { statusCode: 500, body: JSON.stringify({ errors }), } }); } catch (error) { // output to netlify function log console.log(error); return { statusCode: 500, // Could be a custom message or object ie JSON.stringify(err) body: JSON.stringify({ msg: error.message }), } } } module.exports = { handler }Creo que el problema puede deberse a que no se devuelve nada después de llamar a enviar (), pero no estoy seguro de cuál es la mejor manera de devolverlo. Todavía no puedo entender las promesas en mi cabeza.
Realmente espero que alguien pueda indicarme la dirección correcta.
muchas gracias david
Está en el camino correcto, no se devuelve nada en la función de envío, por lo que la respuesta siempre será indefinida. También está utilizando .then con sintaxis async/await que está bien, async/await es solo una forma más limpia de usar promesas, por lo que normalmente usa una u otra. Y anidar bloques catch aquí es innecesario. Yo lo reescribiría a algo como esto:
const handler = async function (event, context) { try { let body = JSON.parse(event.body); mailchimp.setConfig({ apiKey: 'XXXXXXXXX', server: 'us20', }); const submit = async () => { const response = await mailchimp.lists.addListMember("XXXXXXXX", { email_address: body.email.toLowerCase(), status: 'subscribed' }); if (response.errors !== undefined && response.errors.length) { throw new Error(response.errors); } return response; } const response = await submit(); return { statusCode: 200, body: JSON.stringify({ response }), } } catch (error) { // output to netlify function log console.log(error); return { statusCode: 500, // Could be a custom message or object ie JSON.stringify(err) body: JSON.stringify({ msg: error.message }), } } }Si todavía tiene problemas con las promesas, le recomiendo que lea los documentos correspondientes, así como los documentos para async/await.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function