Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 读取Firebase数据会阻止异步方法解析_Node.js_Firebase_Asynchronous_Alexa - Fatal编程技术网

Node.js 读取Firebase数据会阻止异步方法解析

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

我想写一本Alexa skill,读自Firebase

我有一个NodeJS方法,当我使用Alexa测试控制台时会调用该方法,但是如果我添加代码从Firebase检索数据,该方法将挂起,直到lambda超时

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秒)