无法从AWS Lambda上托管的Alexa技能中将数据推送到Firebase

ira*_*ams 5 amazon-web-services firebase aws-lambda firebase-realtime-database alexa-skills-kit

我在Firebase中有一个数据库,我正在尝试从我的Alexa Skill中编写一些数据.该技能的Node.js代码位于AWS Lambda函数内,当运行该代码时,我想将一些数据推送到Firebase.

我已经测试了连接到Lambda之外的Firebase并推送到Firebase的代码,它完全按预期工作.以下是该代码:

var firebase = require('firebase');

firebase.initializeApp({
    databaseURL: 'https://myapp.firebaseio.com',
    serviceAccount: './myapp.json',
});

var cart = firebase.database().ref('/cart'); 
console.log(cart);
    cart.push( {
    item: 'apples', quantity: '1', amount: '0'
},  function(error) {
    if (error) {
         console.log("Data could not be saved." + error);
    } else {
         console.log("Data saved successfully.");
    }
});
Run Code Online (Sandbox Code Playgroud)

从Lambda函数执行时,相同的代码不会向数据库实例推送任何内容.我在网上看到Lambda超时限制可能是这个的原因,所以我将超时限制增加到一分钟,它仍然没有按预期运行.我也尝试使用Firebase REST API而不是他们的Node.js SDK,但这也不起作用.从AWS Lambda中将数据推送到Firebase的正确方法是什么?

mat*_*c19 1

我也遇到过这个问题,我想出如何让它工作的唯一方法是延迟处理程序中的 lambda 回调函数。试试这个,让我知道它是否有效。

var firebase = require('firebase');

firebase.initializeApp({
    databaseURL: 'https://myapp.firebaseio.com',
    serviceAccount: './myapp.json',
});

exports.handler = (event, context, callback) => {
    var cart = firebase.database().ref('/cart'); 
    console.log(cart);
        cart.push( {
        item: 'apples', quantity: '1', amount: '0'
        setTimeout(()=>{
            callback(null, 'success');
        },2000);
    },  function(error) {
        if (error) {
             console.log("Data could not be saved." + error);
             setTimeout(()=>{
                 callback(error);
             },2000);
        } else {
             console.log("Data saved successfully.");
             setTimeout(()=>{
                 callback(null, 'success');
             },2000);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)