Я пытался найти решение своей проблемы, но не смог его найти, и искал несколько «лучших примеров». У меня есть экспресс-приложение nodejs, и мои функции разбиты на файлы. Например, у меня есть этот контроллер (oktacontroller.js):
var okta_api_key = <here some await data, getting from db>;
const OKTA_ORG_URL = '<here too>';
exports.createUser = async (req, res) => {
console.log(okta_api_key);
}
exports.getGroups = async (req, res) => {
console.log(okta_api_key);
}
В обеих экспортируемых функциях (которые являются экспресс-маршрутами) мне нужен var okta_api_key. Я знаю, что могу получить их, запросив их в обеих функциях, потому что они являются асинхронными функциями, и я могу использовать await там, но чувствую, что запрашивать это каждый раз (потому что это никогда не изменится).
Как мне это сделать? Я знаю, что могу сделать это:
var okta_api_key;
(async () => {
okta_api_key = await <getting key async>
})()
Но это тоже хорошо ...
Есть ли способ сделать какую-то большую функцию асинхронной и экспортировать две функции? Другими словами: как использовать await на верхнем уровне файла (модуля). Он не обязательно должен быть на верхнем уровне (это невозможно), но это своего рода метод, чтобы мои переменные «верхнего уровня» были доступны для моих экспортируемых функций.
РЕДАКТИРОВАТЬ: какой-то другой вариант использования, потому что я получил предложение поместить его в файл конфигурации. Да, для этого это возможно, но, например: у меня есть какой-то другой ключ API, который получает свой токен доступа от самой службы при каждом запуске (потому что срок его действия истекает). Этот токен не может быть сохранен в файле конфигурации, поэтому мне нужна некоторая асинхронная работа для получения значения. Я знаю, что top-level-await не работает (или даже нежелателен), но я просто хочу привести пример того, как вы, ребята, сделали бы это, если бы это был ваш проект:)