Google Cloud / Firebase Функции: ожидание действует только в асинхронной функции - PullRequest
0 голосов
/ 20 мая 2019

Я создал эту функцию:

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 Ответ

1 голос
/ 20 мая 2019

Вы не показываете его в своем вопросе, но функция, которая содержит вызов await getRoomTempFromRoomId сама по себе не помечена async. Вы можете использовать await только в том случае, если функция, которая немедленно включает его, является async функцией. Не то, чтобы await все равно не работал, если он находится внутри анонимной функции, которая находится внутри асинхронной функции, потому что сама функция обратного вызова не является асинхронной.

...