Срок действия вызываемой функции «Привет» мирового уровня истекает через 70 секунд, даже если ответ был правильным.
Функция вызова:
export const helloWorld = functions.https.onCall((data, context) => {
return { test: "hello world" };
});
на стороне клиента:
const onClick = () => {
helloWorld()
.then(res => {
console.log({ res });
})
.catch(err => {
console.log(err);
});
};
console: введите описание изображения здесь
успешно получите ответ от вызываемой функции в браузере => {test: "hello world"}
Ошибка: дедлайн- превышено
ошибка выдается:
* @param millis Number of milliseconds to wait before rejecting.
*/
function failAfter(millis) {
return new Promise(function (_, reject) {
setTimeout(function () {
reject(new HttpsErrorImpl('deadline-exceeded', 'deadline-exceeded'));
}, millis);
});
}
/**
* Calls a callable function asynchronously and returns the result.
* @param name The name of the callable trigger.
* @param data The data to pass as params to the function.s
*/
Service.prototype.call = function (name, data, options) {
return tslib.__awaiter(this, void 0, void 0, function () {
var url, body, headers, context, timeout, response, error, responseData, decodedData;
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
url = this._url(name);
// Encode any special types, such as dates, in the input data.
data = this.serializer.encode(data);
body = { data: data };
headers = new Headers();
return [4 /*yield*/, this.contextProvider.getContext()];
case 1:
context = _a.sent();
if (context.authToken) {
headers.append('Authorization', 'Bearer ' + context.authToken);
}
if (context.instanceIdToken) {
headers.append('Firebase-Instance-ID-Token', context.instanceIdToken);
}
timeout = options.timeout || 70000;
return [4 /*yield*/, Promise.race([
this.postJSON(url, body, headers),
failAfter(timeout),
this.cancelAllRequests
])];
case 2:
response = _a.sent();
// If service was deleted, interrupted response throws an error.
if (!response) {
throw new HttpsErrorImpl('cancelled', 'Firebase Functions instance was deleted.');
}
error = _errorForResponse(response.status, response.json, this.serializer);
if (error) {
throw error;
}
if (!response.json) {
throw new HttpsErrorImpl('internal', 'Response is not valid JSON object.');
}
responseData = response.json.data;
// TODO(klimt): For right now, allow "result" instead of "data", for
// backwards compatibility.
if (typeof responseData === 'undefined') {
responseData = response.json.result;
}
if (typeof responseData === 'undefined') {
// Consider the response malformed.
throw new HttpsErrorImpl('internal', 'Response is missing data field.');
}
decodedData = this.serializer.decode(responseData);
return [2 /*return*/, { data: decodedData }];
}
});
});
};
return Service;
}());