簡體   English   中英

從 Netlify Function 返回 Promise

[英]Returning Promises from Netlify Function

我正在開發一個在 Netlify 上托管的無服務器 function,以便為用戶訂閱 mailchimp email 列表。

我收到以下晦澀的錯誤:

lambda response was undefined. check your function code again

這是我的 function:


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 i.e. JSON.stringify(err)
            body: JSON.stringify({ msg: error.message }),
        }
    }
}

module.exports = { handler }

我認為問題可能是因為調用 submit() 后沒有返回任何內容,但我不確定如何最好地返回它。 我仍然無法完全理解承諾。

我真的希望有人能指出我正確的方向。

非常感謝大衛

您走在正確的軌道上,提交 function 沒有返回任何內容,因此響應將始終未定義。 此外,您正在使用.then 和 async/await 語法,這是可以的,async/await 只是使用 Promise 的一種更簡潔的方式,因此您通常使用其中一個。 並且在這里嵌套 catch 塊是不必要的。 我會把它改寫成這樣的:

 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 }), } } }

如果您仍在為 promises 苦苦掙扎,我建議您閱讀它們的文檔以及 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM