node.js - 从 AWS Lambda 使用 Firebase 导致任务超时
问题描述
我正在使用 Lambda 函数创建具有 Firebase 身份验证的用户,然后将它们保存在我自己的数据库中。
var firebase = require('firebase-admin')
const serviceAccount = require('./firebase.json')
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount),
databaseURL: 'https://*****.firebaseio.com'
})
exports.handler = function(event, context, callback) {
const {email, password, name, ...} = event
firebase.auth().createUser({
email,
emailVerified: false,
password,
displayName: name,
disabled: false
})
.then(firebaseResult => {
const {uid} = firebaseResult
return saveUserAtDatabase({email, name, ...})
})
.then(result => {
callback(null, result)
})
}
该用户是在 Firebase 和我的数据库中创建的,但是当我在 AWS Lambda 上运行它时,它会引发以下错误:
{"errorMessage":"2019-01-07T21:25:49.095Z c...e9 Task timed out after 6.01 seconds"}
无论我从函数中增加多少时间或设置更高的内存,它仍然会引发相同的错误。
解决方案
我解决了问题设置context.callbackWaitsForEmptyEventLoop=false
。
这是因为callback
等待事件循环为空,而使用 firebase.auth().createUser() 不会发生这种情况。此处记录了该context.callbackWaitsForEmptyEventLoop
选项http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html
当此属性设置为 时false
,Lambda 会冻结容器,但在您调用 时不会清除事件循环callback
。
推荐阅读
- android - 为什么 `android:foreground` 属性不起作用?
- c# - 您可以返回从 PUT 请求发送的不同对象吗?
- c# - C# - 如何使用 xNet 从网站获取 cookie
- list - 自动列表制作?
- javascript - 链接获取调用 React.js
- spinnaker - 安装 Kubernates 后大三角帆吊舱未处于就绪状态
- google-cloud-platform - 虚拟机实例,不同于页面标记
- jquery - 使用 jquery 追加数据时,django url 中没有变量值
- reactjs - 选择选项卡后加载选项卡内容,并从先前选择的选项卡中删除加载的内容
- python - Django rest 框架 - 从 json 创建或更新值