我正在尝试实现一个 Alexa 技能(用 Jovo 编写)来访问我们存储在 Google 的 Firebase 存储中的音频文件。但是,无论我给出什么超时值,我都无法让 lambda 函数返回。我相信我的问题在于我如何在 Lambda 中处理异步代码,但我无法弄清楚我正在尝试做的事情的正确语法,尤其是在 Jovo 框架中。
这是一些有问题的代码的版本。在实际代码中,它将 url 传递给音频播放器,但这个示例更简单地演示了问题:
app.setHandler({
async LAUNCH() {
firebase.initializeApp(firebaseConfig);
const storageFiles = firebase.storage().ref().child('EN');
const storageFile = storageFiles.child('1.mp3');
const url = await storageFile.getDownloadURL();
console.log(`My URL: ${url}`);
this.tell(`Ok, done with getting the URL`);
},
... More Jovo intent calls ...
});
module.exports.app = app;
当我在 Lambda 函数中运行它时,我看到 console.log 打印出了一个好的 URL。我还看到了构建的 SSML 字符串,但我从未听到过该短语并且 Lambda 函数超时(即使有 20 秒的超时)。如果我注释掉 getDownloadURL 行,函数返回就好了。另外,如果我在 Lambda 之外运行jovo run
它,它在那里也可以正常工作。
底线:我需要做什么才能在 lambda 函数中使用 getDownloadURL() 方法?