等待与promise或async / await的连接

时间:2019-07-07 16:48:36

标签: javascript promise async-await

好的,我放弃搜索了。有人可以帮我解决整个JavaScript异步行为吗?我是JavaScript的新手。我要实现的目标:
打开到我的sql数据库的连接。将该连接存储到变量。在我的以下代码中使用此连接。
问题:连接的打开是异步的,代码在其上运行,并且我的连接变量是undefined
那么,如何在异步功能之外等待这些功能完成?
我的代码:

'use strict';
const mssql = require('mssql');
let config = {...} // everything works inside here
let connection;
let connectFunction = async () => {
  return mssql.connect(config);
};
let result;
connectFunction().then(resolve => {
  connection = resolve;
  connection.request().query('SELECT * FROM users').then(result => {console.log(result);});
  // This would work, BUT I dont want to be stuck inside a thenified or async function
});
connection.request().query('SELECT * FROM users').then(result => {console.log(result);});
// This does not work, because the connectFunction would not be awaited.

我想稍后再使用打开的连接,因此在connectFunction().then内工作会很愚蠢,因为那样会在每个查询中打开连接。
如何解决这个最佳方法?

1 个答案:

答案 0 :(得分:1)

您可以将多个.then添加到同一承诺中,因此,如果您愿意这样做:

  let connection = connectionFunction();

您可以在任何地方重用该连接:

  connection.then(db => {
   db.request().query("...");
  });

 connection.then(db => {
   db.request().query("...");
 });
  

那么,如何在异步功能之外等待这些功能完成?

很快就会有top level await,它允许您编写:

  let connection = await connectionFunction();

然后connection将包含连接本身,而不是诺言。