Node.js 读取Firebase数据会阻止异步方法解析
我想写一本Alexa skill,读自Firebase 我有一个NodeJS方法,当我使用Alexa测试控制台时会调用该方法,但是如果我添加代码从Firebase检索数据,该方法将挂起,直到lambda超时Node.js 读取Firebase数据会阻止异步方法解析,node.js,firebase,asynchronous,alexa,Node.js,Firebase,Asynchronous,Alexa,我想写一本Alexa skill,读自Firebase 我有一个NodeJS方法,当我使用Alexa测试控制台时会调用该方法,但是如果我添加代码从Firebase检索数据,该方法将挂起,直到lambda超时 const HelloWorldIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentReque
const HelloWorldIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'plantsIntent';
},
async handle(handlerInput) {
const snapshot = (await db.collection('plants').get()).data();
const names = snapshot.docs.map(doc => doc.data().name);
const speakOutput = 'Get yourself some cool plants like' + names.join(' and ');
console.log(speakOutput);
var response = handlerInput.responseBuilder
.speak(speakOutput)
//.reprompt('add a reprompt if you want to keep the session open for the user to respond')
.getResponse();
console.log(response);
return response;
}
};
当我运行这段代码时,我将speakOutput
字符串和response
对象输出都输入到日志中,因此我知道代码正在设法达到这一目的
我怀疑这与Firebase有关,好像我删除了db.collection('plants').get()
snippet(以及相关变量),然后代码运行到完成
我怀疑这与方法不返回有关,而与异常发生有关,因为响应
的输出在工作版本(没有Firebase.get()
)和非工作版本中是相同的
任何帮助都将不胜感激 如果你稍微修改一下你的“等待”语句,它会起作用吗?e、 g`const snapshot=await db.collection('plants').get();const data=snapshot.data()您是说您的console.log显示了所有正确的名称吗?console.log的顺序是否正确?它没有在响应日志之后显示speakOutput,在这种情况下,这取决于异步性质。对不起,我只是想澄清一下!您的日志是否显示lambda执行时间?无需道歉!我感谢你的回答:-)。不幸的是,修改我的“等待”声明没有任何区别。
console.log
显示了所有正确的名称,并且日志的顺序正确。CloudWatch日志显示,console.log
s也会在我预期的时间发生,但随后会挂起,直到Lambda超时(10秒)