Обойти проблему асинхронности / ожидания - PullRequest
0 голосов
/ 23 октября 2018

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

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

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

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

0 голосов
/ 23 октября 2018

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

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