Решение проблемы async / await

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

Кто-нибудь нашел способ централизовать эти объекты, чтобы мне не приходилось объявлять их в каждой асинхронной функции моего приложения?

Что именно означает "каждая асинхронная функция моего приложения"? Используют ли все ваших функций эти два объекта? Как называются все функции? Они организованы в методы экземпляров или что-то в этом роде? И есть ли в вашем приложении какая-то функция или точка входа main?

Bergi 23.10.2018 20:27

См. Также этот ответ для общего подхода.

Bergi 23.10.2018 20:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
41
2

Ответы 2

Похоже, вам нужно установить эти соединения, прежде чем приложение сделает что-нибудь еще. Так почему бы просто не заставить загрузку вашего приложения тоже использовать async / await?

async function init() {
  const connections = await getConnections();
  const app = initializeTheRestOfYourApp(connections); // now safe to do inserts
};
init();

Сейчас это в значительной степени работает. Не знаю, почему, поскольку нет блокировки между этим init () и следующим асинхронным методом в цепочке вызовов, использующим соединение, но оно работает. - Дэвид Старр - Elegant Code только что

Другие вопросы по теме