我在 Firebase 中有一个数据库,我正在尝试从 Alexa Skill 中向其中写入一些数据。该技能的 Node.js 代码位于 AWS Lambda 函数内,当该代码运行时,我想将一些数据推送到 Firebase。
我已经测试了在 Lambda 之外连接和推送到 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.");
}
});
当从 Lambda 函数中执行时,相同的代码不会将任何内容推送到数据库实例。我在网上看到Lambda超时限制可能是造成这种情况的一个原因,所以我将超时限制增加到一分钟,但它仍然没有按预期运行。我还尝试使用 Firebase REST API 而不是 Node.js SDK,但这也不起作用。从 AWS Lambda 中将数据推送到 Firebase 的正确方法是什么?
最佳答案
我想我知道为什么会发生这种情况,我也遇到过类似的问题,这就是我所做的。
如果您想将一些日期写入数据库,您需要确保在完成之前不要调用 this.emit(*****) 。一旦您将响应返回给用户,线程就会关闭,并且您的信息不会被保存。
解决此问题的最简单方法是在确认信息已保存后向用户返回响应。
对于 Firebase 来说是这样的:
function writeUserData(userId) {
// Get a key for a new Post.
var userKey = db.ref('users/').push().key;
var reference = db.ref('users/' + userKey).set({
user: userId
});
reference.then(() => {
alexa.emit(':ask', "Works");
},
(err) => {
alexa.emit(':ask', "Does not work");
});
}
在我开始这样做之前,我无法保存任何东西。
希望有帮助。
关于amazon-web-services - 无法从 AWS Lambda 上托管的 Alexa Skill 中将数据推送到 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40166141/