Я создаю простой скрипт узла, чтобы изучить функциональность Cosmos DB. Я хочу создать способ, чтобы не указывать следующее в верхней части каждой асинхронной функции (да, я знаю, что могу связать асинхронные вызовы, но это все равно означает, что я должен использовать новый экземпляр db в верхней части каждого функция. Итак, я хочу сделать что-то вроде этого:
const {database} = await client.databases.createIfNotExists({id: databaseId});
const {container} = await database.containers.createIfNotExists({id: containerId});С учетом сказанного, я несколько часов бился об этом и не могу найти способ создать одну базу данных и один контейнер для всех моих функций, которыми можно поделиться. Идея (но не реализация, потому что она не работает, состоит в следующем:
getConnections = async () => {
const {database} = await client.databases.createIfNotExists({id: databaseId});
const {container} = await database.containers.createIfNotExists({id: containerId});
let connections = {};
connections.db = database;
connections.container = container;
return connections;
};
Но поскольку метод getCoonections является асинхронным (что должно быть, потому что методы, которые будут его использовать), функция не обязательно завершается до того, как первая вставка будет сделана в другую функцию, что вызовет исключение.
Кто-нибудь нашел способ централизовать эти объекты, чтобы мне не приходилось объявлять их в каждой асинхронной функции моего приложения?
См. Также этот ответ для общего подхода.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, вам нужно установить эти соединения, прежде чем приложение сделает что-нибудь еще. Так почему бы просто не заставить загрузку вашего приложения тоже использовать async / await?
async function init() {
const connections = await getConnections();
const app = initializeTheRestOfYourApp(connections); // now safe to do inserts
};
init();
Сейчас это в значительной степени работает. Не знаю, почему, поскольку нет блокировки между этим init () и следующим асинхронным методом в цепочке вызовов, использующим соединение, но оно работает. - Дэвид Старр - Elegant Code только что
Что именно означает "каждая асинхронная функция моего приложения"? Используют ли все ваших функций эти два объекта? Как называются все функции? Они организованы в методы экземпляров или что-то в этом роде? И есть ли в вашем приложении какая-то функция или точка входа
main?