解决异步/等待问题

时间:2018-10-23 12:54:42

标签: javascript azure-cosmosdb azure-cosmosdb-sqlapi

我正在创建一个简单的节点脚本来学习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 :(得分:1)

听起来,您需要在应用程序执行任何其他操作之前获得这些连接。那么,为什么不简单地使应用程序的加载也使用异步/等待呢?

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

答案 1 :(得分:0)

现在几乎可以正常工作了,不知道为什么,因为init()和调用链中的下一个异步方法之间没有阻塞,但是使用了连接,但是它可以正常工作。 – David Starr-刚刚发布的精美代码