繁体   English   中英

在异步 AWS Lambda 函数中使用带有 node-fetch 模块的 node.js 时遇到问题

[英]trouble using node.js w/ node-fetch module in async AWS Lambda Function

这是我想要做的:我有一个由 webhook 触发的 lambda 函数,它将处理该数据并使用它向 api 发出 POST 请求。

我正在使用 Node.js 12 和 node-fetch 模块。

现在该函数被正确触发,但它不会在第一次被调用时发送 POST。 但是如果我在短时间内重复触发 lambda 函数,第一个之后的请求就会通过。

这是我的 lambda 函数的 index.js 文件中的代码:

const fetch = require('node-fetch');

exports.handler = async (event) => {

    sendPost();

    const response = {
        statusCode: 200,
        body: "Ok",
    };

    return response;
};


function sendPost() {

    const url = "http://requestbin.net/r/vjv4mvvj";

    const body = {
        foo: "foo",
        bar: "bar",
        baz: "baz"      
    };

    const params = {
        method: "POST",
        mode: "cors",
        headers: {"Content-Type":"application/json"},
        body: JSON.stringify(body)
    };

    fetch(url, params);

}

当我删除(event)前面的async时,请求会第一次通过,但是首先发送 webhook 的服务器没有得到响应。

所以基本上我需要在每次调用函数时发送 POST 并且还能够返回 200 状态代码。

我没有太多使用异步的经验,所以我知道它与此有关,但我正在挠头。

fetch 返回一个 promise,你需要一个await 您还需要将sendPost函数标记为async 您还需要处理程序函数来等待sendPost函数完成。

const fetch = require('node-fetch');

exports.handler = async (event) => {

    await sendPost();

    const response = {
        statusCode: 200,
        body: "Ok",
    };

    return response;
};


async function sendPost() {

    const url = "http://requestbin.net/r/vjv4mvvj";

    const body = {
        foo: "foo",
        bar: "bar",
        baz: "baz"      
   };

    const params = {
        method: "POST",
        mode: "cors",
        headers: {"Content-Type":"application/json"},
        body: JSON.stringify(body)
    };

    await fetch(url, params);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM