【发布时间】:2017-01-22 04:37:30
【问题描述】:
我正在构建 Alexa 技能,这需要我收听 Firebase 实时数据库。在该技能的一个特定部分中,我需要向 Firebase 写入一个 JSON 对象,该对象由两个字段组成,“intent”,具有一个无关紧要的值,“done”,其值为false。
然后,我等待另一个侦听此数据库的设备注册此更改,此时它会创建另一个名为“result”的字段,其中包含一些数值,并将“done”的值更改为 true。
那么原函数(test1)应该识别“done”的值为真,然后检索“result”的值。
我遇到的问题是想出一个函数,该函数在我的主(异步)函数完成之前执行所有这些读/写操作。正如标题所示,AWS Lambda 出于某种原因超时,我无法读取“结果”的值。
这是我正在使用的功能:
function test1(intentName, targetRef, context) {
console.log("writing");
targetRef.set({
intent: intentName,
done: false
}).then(function() {
return targetRef.orderByChild("done").equalTo(true).on("value");
}).then(function(snapshot) {
var res = snapshot.val().result;
console.log("Res: " + res);
context.succeed( //context.succeed should be called after "result" has a value.
generateResponse(
buildSpeechletReponse("The result is" + processNumbersForSpeech(res), true),
{}
)
);
});
}
这是控制台的输出(在 AWS Lambda 中):
20:05:31
START RequestId: a25d2354-d9cb-11e6-b80a-f35142a5f45f Version: $LATEST
20:05:31
2017-01-13T20:05:31.464Z a25d2354-d9cb-11e6-b80a-f35142a5f45f writing
20:05:35
END RequestId: a25d2354-d9cb-11e6-b80a-f35142a5f45f
20:05:35
REPORT RequestId: a25d2354-d9cb-11e6-b80a-f35142a5f45f Duration: 4001.15 ms Billed Duration: 4000 ms Memory Size: 128 MB Max Memory Used: 39 MB
20:05:35
2017-01-13T20:05:35.335Z a25d2354-d9cb-11e6-b80a-f35142a5f45f Task timed out after 4.00 seconds
以下是 Firebase 数据的结构:
“完成”最初是错误的。当其他设备添加“result”时,它也会将“done”的值更新为true。 “148434459...”是 targetRef。
非常感谢您的帮助。如果需要,我会提供更多信息。
【问题讨论】:
-
希望我的回答能帮助到stackoverflow.com/a/45266181/2073325
标签: javascript amazon-web-services firebase firebase-realtime-database aws-lambda