>source

await로 설정하지 않고 myRef1Value의 val()을 가져올 수 없는 문제가 있습니다. 문제는 내가 할 때 비동기 함수 외부에서 'await' 키워드를 사용할 수 없다는 오류가 발생한다는 것입니다.

모든 사용자의 카운터를 1씩 늘리려고 합니다. 이 문제를 해결할 수 있는 방법을 아는 사람이 있습니까?

const functions= require("firebase-functions");
const admin= require("firebase-admin");
admin.initializeApp();
exports.scheduledFunction= functions.pubsub
    .schedule("* * * * *")
    .onRun(async (context)=> {
      console.log("starting");
      const db= admin.database();
      const updates= {};
      const snapshot= await db.ref("Users").once("value");
      snapshot.forEach((childSnapshot)=> {
        const myRef1Value= (await db
            .ref("Users/" + childSnapshot.key + "/counter").get());
        console.log(myRef1Value+"");
        const newValue= myRef1Value.val() + 1;
        console.log(newValue);
        updates["/Users/" + childSnapshot.key + "/counter"]= newValue;
      });
      return db.ref().update(updates);
    });

  • 답변 # 1

    여러 비동기 호출을 시작하지만 Firebase 데이터베이스는 이벤트가 호출된 후 즉시 반환됩니다. 따라서 예상대로 작동하지 않습니다. 당신은 같은 것을 시도 할 수 있습니다

    for (const childSnapshot of snapshot) {
        const myRef1Value= await db.ref("Users/" + childSnapshot.key + "/counter").get();
        console.log(myRef1Value+"");
        const newValue= myRef1Value.val() + 1;
        console.log(newValue);
        await db.ref("Users/" + childSnapshot.key + "/counter").update(newValue);
    }
    

    위의 code가 적합합니다.

  • 이전 python : 지수 형식/과학 표기법 없이 십진수를 인쇄하는 방법은 무엇입니까?
  • 다음 .net : IEnumerable 시퀀스의 파티션