Firebase Cloud Function занимает очень много времени, чтобы вернуть результат клиентуJavascript

Форум по Javascript
Ответить
Anonymous
 Firebase Cloud Function занимает очень много времени, чтобы вернуть результат клиенту

Сообщение Anonymous »

У меня есть облачная функция 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;
// ...
});
}
Я попробовал ту же функцию с меньшей полезной нагрузкой данных и работает быстро, однако с большей полезной нагрузкой данных она занимает очень много времени, хотя в журналах облаков показана функция, выполненная успешно за много секунд, прежде чем сторона клиента получает возвращенный ответ от функции облака.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... the-client
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»