【问题标题】:firebase cloud functions aync/await returning undefined causing the function to crashfirebase 云函数 async/await 返回 undefined 导致函数崩溃
【发布时间】:2019-03-02 19:57:21
【问题描述】:

我有以下 Firebase 云功能:

export const  setFlightAlert = functions.database.ref('/trips/{pushId}/milestones').onCreate(async (snapshot) => {
    let milestones: Milestone[] = [];
    for (let milestone of snapshot.val()) {
        let alert_id = 0;
        if (+milestone.type.key === MilestoneTypes.departed_airport) {
            const request = await setAlertId(milestone);
            alert_id = request;
            milestone = {
                ...milestone,
                alert_id: alert_id,
                ident: milestone.airline.name + milestone.flight_number
            };
        } else if (+milestone.type.key === MilestoneTypes.arrived_airport) {
            milestone = {
                ...milestone,
                alert_id: alert_id,
                ident: milestone.airline.name + milestone.flight_number
            };
        }
        milestones = [...milestones, milestone];
    }
    return snapshot.ref.set(milestones)
})

async function setAlertId(milestone: Milestone) {
    let alert_id;
    const data = new FormData();
    data.append('alert_id', 0);
    data.append('ident', `${milestone.airline.name}${milestone.flight_number}`);
    data.append('origin', milestone.airport.icao);
    data.append('date_start', new Date(milestone.flight_time).getTime() / 1000);
    data.append('date_end', new Date(milestone.flight_time).getTime() / 1000);
    data.append('chennels', '{16 e_filed e_departure e_arrival e_diverted e_cancelled}');
    alert_id = await axios.post<{SetAlertResult: number}>(urls.setAlert, data, {
        headers: {...headers, ...data.getHeaders()},
        withCredentials: true
    })
    return alert_id.data.SetAlertResult;
}

当这个函数被触发时,它应该从对 setAlertId() 的异步等待调用中获取 alert_ad 的值。但是,当它运行时,我在云函数日志中收到一个错误,指出它未定义。我不确定为什么会发生这种情况。

Error: Reference.set failed: First argument contains undefined in property 'trips.-LZztKpsQxr_9p3p4-D3.milestones.0.alert_id'
    at validateFirebaseData (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/index.node.cjs.js:1442:15)
    at /user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/index.node.cjs.js:1488:13
    at Object.forEach (/user_code/node_modules/firebase-admin/node_modules/@firebase/util/dist/index.node.cjs.js:846:13)
    at validateFirebaseData (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/index.node.cjs.js:1471:14)
    at /user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/index.node.cjs.js:1488:13
    at Object.forEach (/user_code/node_modules/firebase-admin/node_modules/@firebase/util/dist/index.node.cjs.js:846:13)
    at validateFirebaseData (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/index.node.cjs.js:1471:14)
    at validateFirebaseDataArg (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/index.node.cjs.js:1430:5)
    at Reference.set (/user_code/node_modules/firebase-admin/node_modules/@firebase/database/dist/index.node.cjs.js:14026:9)
    at Object.<anonymous> (/user_code/lib/index.js:46:70)

我如何测试或记录这一点,以便我可以确保 async/await 实际上得到了一个值?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    与任何 JavaScript 环境一样,您可以使用 console.log() 记录值。它们最终会在 Firebase 控制台中显示。

    还可以考虑使用local testing 以便于测试和调试。

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 2022-08-18
      • 1970-01-01
      • 2019-06-27
      • 2019-05-30
      • 2019-03-01
      相关资源
      最近更新 更多