0

我正在创建一个简单的节点脚本来学习 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 方法是异步的(一定是因为使用它的方法也是异步的),因此该函数不一定会在另一个函数中进行第一次插入之前完成,从而导致异常。

有没有人找到一种方法来集中这些对象,这样我就不必在我的应用程序的每个异步函数中声明它们?

4

2 回答 2

1

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

async function init() {
  const connections = await getConnections();
  const app = initializeTheRestOfYourApp(connections); // now safe to do inserts
};
init();
于 2018-10-23T18:23:37.993 回答
0

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

于 2018-10-28T16:10:51.350 回答