Panggil fungsi async di AWS Lambda

Saya mencoba menjalankan fungsi sebagai async karena saya tidak ingin menunggu jawabannya.

Saya telah membaca dokumen AWS dan dikatakan menggunakan InvocationType sebagai Event tetapi itu hanya berfungsi jika saya melakukan .promise().

versi tidak berfungsi:

lambda.invoke({
  FunctionName: 'rock-function',
  InvocationType: 'Event',
  Payload: JSON.stringify({
    queryStringParameters: {
      id: c.id,
      template: c.csvTemplate
    }
  })
})

versi yang berfungsi:

lambda.invoke({
  FunctionName: 'rock-function',
  InvocationType: 'Event',
  Payload: JSON.stringify({
    queryStringParameters: {
      id: c.id,
      template: c.csvTemplate
    }
  })
}).promise()

Adakah yang bisa saya jelaskan mengapa hal itu terjadi?


person Community    schedule 19.02.2019    source sumber


Jawaban (1)


invoke mengembalikan AWS.Request, yang tidak secara otomatis akan melakukan permintaan. Ini adalah representasi dari permintaan yang tidak dikirim sampai send() dipanggil.

Itu sebabnya versi terakhir berfungsi tetapi versi pertama tidak. Permintaan dikirim ketika .promise() dipanggil.

// a typical callback implementation might look like this
lambda.invoke({
    FunctionName: 'rock-function',
    InvocationType: 'Event',
    Payload: JSON.stringify({
        queryStringParameters: {
            id: c.id,
            template: c.csvTemplate,
        },
    }),
}, (err, data) => {
    if (err) {
        console.log(err, err.stack);
    } else {
        console.log(data);
    }
});

// ... or you could process the promise() for the same result
lambda.invoke({
    FunctionName: 'rock-function',
    InvocationType: 'Event',
    Payload: JSON.stringify({
        queryStringParameters: {
            id: c.id,
            template: c.csvTemplate,
        },
    }),
}).promise().then(data => {
    console.log(data);
}).catch(function (err) {
    console.error(err);
});
person Dave Maple    schedule 19.02.2019