Aquí está mi problema, tengo una función de nube invocable que me gustaría usar en mi aplicación Flutter.
Puede encontrar el código a continuación.
Sin embargo, cada vez que presiono el botón correspondiente a la función, siempre tengo un valor "nulo" en mi aplicación que proviene de Cloud Functions, incluso si mi respuesta está impresa en la consola.
Por lo que entiendo, la función devuelve un valor "nulo" ya que jsonResponse aún no está aquí.
Me gustaría encontrar una manera de devolver jsonResponse solo cuando la respuesta esté allí.
Ya probé async, await y promises, pero ¿tal vez lo usé de manera incorrecta?
Gracias
// code on JS exports.writeMessage = functions.https.onCall(async (data, context) => { global.XMLHttpRequest = require("xhr2"); function makeRequest(method, url) { appleMusicKey = 'XXXXXXX' return new Promise(function (resolve, reject) { let http = new XMLHttpRequest(); http.open(method, url); http.setRequestHeader('Authorization', 'Bearer ' + appleMusicKey); http.onload = function () { if (this.status >= 200 && this.status < 300) { resolve(JSON.parse(http.response)['data'][0]['attributes']['url'].toString()); } else { reject({ status: this.status, statusText: http.statusText }); } }; http.onerror = function () { reject({ status: this.status, statusText: xhr.statusText }); }; http.send(); }); } async function doAjaxThings() { var isrcCode = 'QMBZ92168114'; let result = await makeRequest("GET", `https://api.music.apple.com/v1/catalog/fr/songs?filter[isrc]=${isrcCode}`); console.log(result); return new Promise(function (resolve, reject) { resolve(result); reject('error'); }); } doAjaxThings(); }); // code on Flutter for calling the function Future<void> writeMessage( ) async { HttpsCallable callable = FirebaseFunctions.instance.httpsCallable('writeMessage'); final resp = await callable.call(); print(resp.data); }