好的,我放弃搜索了。有人可以帮我解决整个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
内工作会很愚蠢,因为那样会在每个查询中打开连接。
如何解决这个最佳方法?
答案 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
将包含连接本身,而不是诺言。