javascript - 谷歌云/Firebase函数: await is only valid in async function

标签 javascript firebase async-await google-cloud-functions

我创建了这个函数:

async function getRoomTempFromRoomId(roomId) {
    const querySnapshot = await db.collection("sensors").where("room", "==", roomId).where("type", "==", "temperature").limit(1).get();
    var values = []
    values = querySnapshot.docs.map((doc) => { return doc.data().value });
    return values[0];
}

现在,当我使用 console.log(await getRoomTempFromRoomId("1234")) 调用此函数时,我收到以下错误:

SyntaxError: await is only valid in async function
    at new Script (vm.js:79:7)
    at createScript (vm.js:251:10)
    at Object.runInThisContext (vm.js:303:10)
    at Module._compile (internal/modules/cjs/loader.js:657:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
⚠  Your function was killed because it raised an unhandled error.

相同的代码适用于其他 Firebase 项目

最佳答案

您没有在问题中显示它,但包含对 await getRoomTempFromRoomId 的调用的函数本身未标记为async。仅当立即包含它的函数是 async 函数时,才可以使用 await。并不是说如果await位于异步函数内的匿名函数内,它仍然无法工作,因为回调函数本身不是异步的。

关于javascript - 谷歌云/Firebase函数: await is only valid in async function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56225422/

相关文章:

c# - 迁移到异步 : Repository

javascript - jquery 滚动事件多次运行代码

javascript - 当您无法控制时如何规避同源策略错误

firebase - 如何从Firebase排序数据?在Flutter应用内

ios - Firebase 崩溃并出现 'listen() called twice for the same query' 错误

c# - 在 TPL 数据流中使用 async/await 和 yield return

.net - RxJS/Rx.Net 可观察订阅与事件 - 性能/线程

javascript - 根据奇数/偶数位置将数组拆分为两个数组

javascript - 调用了错误的 BindingHandler

javascript - 在 Firebase 的函数中获取访问 firestore 数据