У меня есть облачная функция Firebase, которая выполняется на сервере, а в облачных журналах отражает функцию, которая успешно выполнена в течение нескольких секунд. Однако стороне клиента требует очень много времени, чтобы получить возвращенное значение облачной функции.
exports.UploadData = functions
.runWith({
// Ensure the function has enough memory and time
// to process large files
timeoutSeconds: 540,
memory: "8GB",
})
.region("us-central1")
.https.onCall(async (data, context) => {
const db = admin.database();
var UserData = [];
return await db
.ref("DATA/")
.once(
"value",
async (snapshot) => {
dataFields = await snapshot.val();
for (let id in dataFields) {
UserData.push({ id, ...dataFields[id] });
}
},
(errorObject) => {
console.log("Database read failed ", errorObject);
}
)
.then(async () => {
let UserID = [
await UserData.filter((el) => el.id).find(
(el1) => el1.id
),
]
.map((el) => el.id)
.toString();
if (context.auth.uid) {
const addDataRef = db.ref(
`/User/${UserID}`
);
let CSVData = await data.data;
let NameAccount1 = await JSON.parse(CSVData);
let promises = [];
const DatabaseSend = async (el) => {
if (
true // conditions
) {
if (
true // conditions
) {
for (
let i = 0;
i < (NameAccount1 && NameAccount1.length);
i++
) {
if (
NameAccount1
) {
if (NameAccount1.date>"2020-12-31" // example condition
) {
let promise0 = await addDataRef.push(
{
date:
(NameAccount1.date),
},
(error) => {
if (error) {
console.log(error);
} else {
console.log("Updated 0");
}
}
);
promises.push(promise0);
} else {
let promise1 = await addDataRef.push(
{
dateNewer:
(NameAccount1.date)
},
(error) => {
if (error) {
console.log(error);
} else {
console.log("Updated");
}
}
);
promises.push(promise1);
}
}
}
}
}
return await Promise.all(promises);
};
return await DatabaseSend().then(() => {
console.log("server complete");
return "SUCCESS";
});
} else {
console.log("ERROR");
return "ERROR";
}
});
});
< /code>
Вот образец кода клиента в React js; < /p>
async function handleData() {
var UploadData = functions.httpsCallable("UploadData", {
timeout: 300000,
});
return await UploadData({
id: userID,
NameAccount1: JSON.stringify(NameAccount1), // data state
})
.then(async (result) => {
let dataReceived = await result.data;
console.log(dataReceived);
return;
})
.catch((error) => {
// Getting the Error details.
var code = error.code;
var message = error.message;
var details = error.details;
console.log(code, message, details);
if (error) {
console.log("ERROR");
return error;
}
return;
// ...
});
}
Я попробовал ту же функцию с меньшей полезной нагрузкой данных и работает быстро, однако с большей полезной нагрузкой данных она занимает очень много времени, хотя в журналах облаков показана функция, выполненная успешно за много секунд, прежде чем сторона клиента получает возвращенный ответ от функции облака.>
У меня есть облачная функция Firebase, которая выполняется на сервере, а в облачных журналах отражает функцию, которая успешно выполнена в течение нескольких секунд. Однако стороне клиента требует очень много времени, чтобы получить возвращенное значение облачной функции.[code] exports.UploadData = functions .runWith({ // Ensure the function has enough memory and time // to process large files timeoutSeconds: 540, memory: "8GB", }) .region("us-central1") .https.onCall(async (data, context) => { const db = admin.database();
return; }) .catch((error) => { // Getting the Error details. var code = error.code; var message = error.message; var details = error.details; console.log(code, message, details); if (error) {
console.log("ERROR"); return error; }
return; // ... }); } [/code] Я попробовал ту же функцию с меньшей полезной нагрузкой данных и работает быстро, однако с большей полезной нагрузкой данных она занимает очень много времени, хотя в журналах облаков показана функция, выполненная успешно за много секунд, прежде чем сторона клиента получает возвращенный ответ от функции облака.>