我正在构建一个Alexa技能,这需要我收听Firebase实时数据库.在技能的一个特定部分,我需要向Firebase编写一个JSON对象,由两个字段组成,"intent",值无关紧要,"done",值为false
.
然后,我等待另一个监听此数据库的设备注册此更改,此时它会创建另一个名为"result"的字段,并带有一些数值,并将"done"的值更改为true.
然后原始函数(test1
)应该识别"完成"的值何时为真,然后检索"结果"的值.
我遇到的问题是提出一个函数,它在我的主(异步)函数完成之前完成所有这些读/写操作.正如标题所示,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数据的结构:
"完成"最初是假的.当其他设备添加"结果"时,它还会将"完成"的值更新为true."148434459 ..."是targetRef.
真的很感激你的帮助.如果需要,我会提供更多信息.