Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Важно управлять жизненным циклом функции, чтобы обеспечить её корректное выполнение. Правильное завершение функций позволит избежать чрезмерных затрат на выполнение функций, которые выполняются слишком долго или зацикливаются. Кроме того, вы можете гарантировать, что экземпляр Cloud Functions , выполняющий вашу функцию, не завершится до того, как функция успешно достигнет своего конечного состояния.
Используйте эти рекомендуемые подходы для управления жизненным циклом ваших функций:
Разрешите функции, которые выполняют асинхронную обработку (также известные как «фоновые функции»), возвращая обещание JavaScript .
Завершайте HTTP-функции с помощью res.redirect() , res.send() или res.end() .
Завершите синхронную функцию с помощью оператора return;
Упростите асинхронный код с помощью обещаний JavaScript
Обещания — это современная альтернатива обратным вызовам для асинхронного кода. Обещание представляет собой операцию и будущее значение, которое она может вернуть. Оно также позволяет передавать ошибки, аналогично try/catch в синхронном коде. Подробнее об обещаниях можно узнать в Firebase SDK на блоге Firebase , а об обещаниях в целом — на сайте MDN .
Как обещания работают с функциями
Когда вы возвращаете JavaScript-обещание в функцию, эта функция продолжает выполняться до тех пор, пока обещание не будет выполнено или отклонено. Чтобы обозначить успешное выполнение функции, обещание должно быть выполнено. Чтобы обозначить ошибку, обещание должно быть отклонено. Это означает, что вам нужно обрабатывать только те ошибки, которые вы считаете необходимыми.
Следующий код принимает refFirebase Realtime Database и устанавливает её значение равным "world!" . Возвращая результат set , ваша функция гарантированно продолжит выполняться до полного завершения асинхронной работы по записи строки в базу данных:
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-09-03 UTC."],[],[],null,["\u003cbr /\u003e\n\nIt's important to manage the lifecycle of a function to ensure that it resolves\nproperly. By terminating functions correctly, you can avoid excessive charges\nfrom functions that run for too long or loop infinitely. Also, you can make sure\nthat the Cloud Functions instance running your function does not shut down\nbefore your function successfully reaches its terminating condition or state.\n\nUse these recommended approaches to manage the lifecycle of your functions:\n\n- Resolve functions that perform **asynchronous** processing (also known as \"background functions\") by returning a [JavaScript\n promise](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n- Terminate **HTTP functions** with `res.redirect()`, `res.send()`, or `res.end()`.\n- Terminate a **synchronous** function with a `return;` statement.\n\n| **Caution:** In all cases, be careful to avoid any situation in which the function's result actually retriggers the function --- for example, a function triggered by writes to a specific Realtime Database path that concludes by writing to that same path.\n\nSimplify asynchronous code with JavaScript promises\n\nPromises are a modern alternative to callbacks for asynchronous code. A promise\nrepresents an operation and the future value it may return. It also lets you\npropagate errors similar to try/catch in synchronous code. You can read about\npromises in the Firebase SDK on [The Firebase\nBlog](https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html),\nand promises in general on\n[MDN](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\nHow promises work with functions\n\nWhen you return a JavaScript promise to a function, that function\nkeeps running until the promise is resolved or rejected. To indicate that a\nfunction has completed its work successfully, the promise should be resolved. To\nindicate an error, the promise should be rejected. This means you only need to\nhandle errors that you want to.\n\nThe following code takes a Firebase Realtime Database `ref` and sets its value to\n`\"world!\"`. By returning the result of `set`, your function is guaranteed to\nkeep running until the asynchronous work of writing the string to the database\nis fully completed: \n\n // Always change the value of \"/hello\" to \"world!\"\n exports.hello = functions.database.ref('/hello').onWrite(event =\u003e {\n // set() returns a promise. We keep the function alive by returning it.\n return event.data.ref.set('world!').then(() =\u003e {\n console.log('Write succeeded!');\n });\n });\n\nExamples in context\n\nMost of our Cloud Functions [code\nsamples](https://github.com/firebase/functions-samples)\ninclude examples of proper function termination. Here are a few that demonstrate\ntypical cases:\n\n- [Realtime Database\n trigger](https://github.com/firebase/functions-samples/tree/main/Node-1st-gen/quickstarts/uppercase-rtdb/functions/index.js): an HTTP function followed by a redirect\n- [Cloud Storage\n trigger](https://github.com/firebase/functions-samples/tree/main/Node-1st-gen/quickstarts/thumbnails/functions/index.js): A storage download followed by `then`\n- [Webhook on Realtime Database\n write](https://github.com/firebase/functions-samples//tree/main/Node-1st-gen/minimal-webhook/functions/index.js): An error thrown inside a `then` clause\n- [Periodically delete unused\n accounts](https://github.com/firebase/functions-samples//tree/main/Node-1st-gen/delete-unused-accounts-cron/functions/index.js): A rejected promise"]]