Die Firebase-GET-Anfrage gibt keine Daten an den Client zurück
P粉448130258
P粉448130258 2024-03-20 08:18:04
0
1
332

Wir haben eine App mit Firestore-Datenbank, die Firebase-Cloud-Funktionen nutzt. Wir versuchen, Daten über jeden Benutzer von einer externen API abzurufen. Unsere Firebase-Cloud-Funktion gibt Daten zurück – ich kann sie in den Protokollen korrekt sehen. Allerdings sehe ich diese Daten nicht im Browser. Ich vermute, dass ich async/await vielleicht nicht richtig verwende?

So rufen wir die Funktion aus unserer Anwendung (in Vuex) auf:

async retrieveByExternalId({ commit }, payload) {
      const retrieveByExternalId = await firebase.functions().httpsCallable('retrieveByExternalId')
      retrieveByExternalId({
        id: payload
      })
      .then(result => {
        console.log(result.data)
        commit('setUserContractorPayProfile', result.data)
      })
    },

Result.data erscheint als null

Dann ist das die Cloud-Funktion:

exports.retrieveByExternalId = functions.https.onCall(async (data, context) => {
  const id = data.id
  
  axios({
    method: "GET",
    url: `https://website/api/v2/workers/external/${id}`,
    headers: {
      accept: '*', 
      'Access-Control-Allow-Origin': '*',
      Authorization: 'API KEY'
    }
  })
  .then(response => {
    functions.logger.log("Response", " => ", response.data);
    return response.data
  })
  .catch((error) => {
    functions.logger.log("Error", " => ", error);
  })
});

Im Funktionsprotokoll kann ich alles korrekt erkennen.

Ist das ein Asynchron-/Wartenproblem? Oder gebe ich falsche Daten zurück?

Danke!

P粉448130258
P粉448130258

Antworte allen(1)
P粉696146205

我还没有尝试过你的代码,但问题很可能是由于你没有返回 云函数中的 Promise 链

你应该这样做:

return axios({  // <====== See return here
    // ...
  })
  .then(response => {
    functions.logger.log("Response", " => ", response.data);
    return response.data
  })
  .catch((error) => {
    functions.logger.log("Error", " => ", error);
  })

或者,由于您声明了函数 async,请使用 await 关键字,如下所示:

exports.retrieveByExternalId = functions.https.onCall(async (data, context) => {

    try {
        const id = data.id

        const axiosResponse = await axios({
            method: "GET",
            url: `https://website/api/v2/workers/external/${id}`,
            headers: {
                accept: '*',
                'Access-Control-Allow-Origin': '*',
                Authorization: 'API KEY'
            }
        });

        functions.logger.log("Response", " => ", axiosResponse.data);
        return axiosResponse.data
    } catch (error) {
        // see https://firebase.google.com/docs/functions/callable#handle_errors
    }
    
});
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!