web-dev-qa-db-ja.com

ASYNC AWS Lambda関数におけるNode.js w / node-fetchモジュールを使用したトラブル

私がしようとしていることは次のとおりです。私はそのデータを処理し、それを使用してPOST要求をAPIにするためにそれを使用するWebhookによって引き起こされるラムダ関数を持っています。

Node.js 12とノードフェッチモジュールを使用しています。

今機能は正しくトリガされていますが、最初に呼び出されたときに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);

}
_

async(イベント)を削除すると、リクエストは初めて表示されますが、最初の場所でWebHookを送信するサーバーは取得できません。応答。

そのため、基本的には、関数が呼び出されるたびに送信するためにPOSTが必要です。また、200のステータスコードを返すこともできます。

私は非同期の経験があまりありませんので、それはそれに関連していることを知っていますが、私は頭を傷つけます。

4
benjfriedrich

フェッチは約束を返し、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);
}
 _
1
Arun K