Google Cloud / Firebase功能:等待仅在异步功能中有效

时间:2019-05-20 17:11:15

标签: 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项目

1 个答案:

答案 0 :(得分:1)

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