![](/img/trans.png)
[英]AWS Lambda function on Java with Serverless framework and GraalVM
[英]Returning AWS Lambda response before waiting for DB query - Serverless framework
我有一個無服務器框架 node.js function 初始化 mysql DB 然后運行查詢,ES6 用於最后返回 HTTP 響應
有沒有辦法在等待數據庫調用完成之前返回響應,例如在 node.js - res.send 將立即返回並且 function 在返回響應后繼續運行
有沒有更好的方法來初始化一個新的 mysql 池(也許重用池而不是在每個請求中創建一個結尾?)
a: 例如,如果答案是在 function 之外創建池,它是如何工作的,lambda function 如何在請求之間重用它,它何時被銷毀以及它如何知道何時重新創建池
import mysql from "mysql";
export const myFunc = async (event) => {
try {
const pool = mysql.createPool({...}); // Creates a new mysql pool
await new Promise((resolve, reject) => {pool.query(
"INSERT STATEMENT", [...params], (error, results) => {
if(error) reject(error)
resolve(results)
}
)});
pool.end();
return {
statusCode: 200,
body: JSON.stringify({message: 'End'}),
};
} catch (err) {
return {
statusCode: 500,
body: JSON.stringify({message: 'Error'}),
};
}
};
- 有沒有辦法在等待數據庫調用完成之前返回響應
是的,但是 Lambda 將在等待數據庫調用完成之前完成執行。 不保證對DB的調用一定會到達DB,所以不建議這樣做。
如果您絕對需要這個,請在這一行中刪除await
語句:
從:
await new Promise((resolve, reject) => {pool.query(
到:
new Promise((resolve, reject) => {pool.query(
- 有沒有更好的方法來初始化一個新的 mysql 池(也許重用池而不是在每個請求中創建一個結尾?)
是的,您需要在 Lambda 處理程序之外初始化您的池。
查看這篇文章了解更多詳情:
https://dashbird.io/blog/leveraging-lambda-cache-for-serverless-cost-efficiency/
基本上,您想做的不是:
import mysql from "mysql";
export const myFunc = async (event) => {
try {
const pool = mysql.createPool({...}); // Creates a new mysql pool
做這個:
import mysql from "MySQL";
const pool = mysql.createPool({...}); // Creates a new mysql pool
export const myFunc = async (event) => {
try {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.