Firebase Cloud Functions - JavaScript/Typescript Promise reject() პრობლემა


მე ვაკეთებ Cloud Functions მეთოდების გამოყენებას, როგორიცაა:

export const someCallableCloudFunction = functions.https.onCall((data, context) => {
   […]
   return new Promise((resolve, reject) => {
      […]
      if (someStatement) {
         resolve("resolveDataString")
      } else {
         reject({ status: "error", code: "429", message: "someErrorMessage" })
      }
   })
})

და წყვეტა მათ ეთანხმება:

firebase.functions().httpsCallable("someCallableCloudFunction")(/*some args*/)
   .then(data => { /* data = "resolveDataString" */ })
   .catch(error => { /* here's the problem */ })

პრობლემა: ეს არის როგორ ჩანს შეცდომა კლაინტში, რომელიც იძახებს მეთოდს: [შეცდომა: შიდა]. და ეს არის როგორ ჩანს შეცდომის ლოგი Firebase Cloud Functions კონსოლში (ემულატორი!):

{
  "status": "error",
  "code": "429",
  "message": "Unhandled error",
  "severity": "ERROR"
}

resolve() მუშაობს იდეალურად, მაგრამ reject() 1) არ გამოდის სწორად Cloud Functions მეთოდში განსაზღვრული შეცდომის ობიექტის დაბეჭდვა და 2) არ გადასცემს შეცდომის ობიექტს კლაინტს. ამის ნაცვლად, კლაინტი იღებს [Error: INTERNAL].

მჭირდება თუ არა resolve()-ის გამოყენება როგორც resolve, ასევე reject და define განცხადებებისთვის, რომლებიც შეიძლება იქნეს დამუშავებული კლიენტის მიერ?

პასუხი #1

როგორც დოკუმენტშია ახსნილი:

მოდუნებული იმისთვის, რომ მომხმარებელს მიიღოს სასარგებლო შეცდომის დეტალები, დააბრუნეთ შეცდომები callable-დან, დახვეტვით (ან Promise-ის დაბრუნებით, რომელიც უარყოფილია) functions.https.HttpsError კლასის მაგალითით.

და

თუ თქვენს ფუნქციებიდან ჰპყრობილი იქნება ჰტდფსთქარუ (HttpsError)-ის გარდა სხვა შეცდომა, თქვენს კლიენტს მის ნაცვლად მიღებული ექნება შეცდომა INTERNAL შეტყობინებით და კოდით internal.