Javascript Knex如何等待执行数据库查询?

Javascript Knex如何等待执行数据库查询?,javascript,node.js,design-patterns,async-await,knex.js,Javascript,Node.js,Design Patterns,Async Await,Knex.js,我试图了解KNEX中如何使用wait关键字。以以下为例: knex.schema.createTable( ... ); 这将返回作为SchemaBuilder实例的this。它不会在数据库中执行CREATETABLE查询。但是如果我坚持并在它前面等待 await knex.schema.createTable( ... ); 现在将在数据库中执行create查询 我的理解是,await用于等待承诺解决方案,但在这种情况下,它感觉好像发生了其他事情,因为不await等待函数不会返回承诺 这是

我试图了解KNEX中如何使用
wait
关键字。以以下为例:

knex.schema.createTable( ... );
这将返回作为SchemaBuilder实例的
this
。它不会在数据库中执行CREATETABLE查询。但是如果我坚持并在它前面等待

await knex.schema.createTable( ... );
现在将在数据库中执行create查询

我的理解是,
await
用于等待承诺解决方案,但在这种情况下,它感觉好像发生了其他事情,因为不
await
等待函数不会返回承诺


这是如何工作的?

如果您想知道knex如何仅在编写
时在构造前面等待
时发出请求,请点击此处

在引擎盖下,
knex
使用一个
模式
,该模式返回一个带有
然后
字段的对象

const异步函数=(延迟)=>{
返回新承诺((解决)=>{
设置超时(()=>{
返回解析(延迟);
},延误);
})
}
常量生成器=(延迟)=>{
返回{
然后:异步(解析)=>{
常量结果=等待异步函数(延迟);
返回解析(结果);
}
}
}
常量main=async()=>{
常量数组=[];

对于(设i=0;这是我的理解,但如果我不使用
await
函数调用,它肯定不会在数据库中创建表。与使用
await
相比,它将执行查询,表将出现在数据库中。@t.J.Crowder前一个表达式只创建一个schemabilder,后一个表达式调用这是SchemaBuilder的
.then()
方法。@Bergi-为什么,为什么我没有想到一个定制的thenable???@Bergi你是对的!我没有意识到你可以建立一个then原型,当你使用
wait
wait fn()时会调用它。
wait fn()只是
fn()的语法糖。然后()
。谢谢!不要忘记
then
的第二个参数。另外,我建议不要将
then
设置为
async函数,以避免异常处理拒绝。只需将
{then(…args){return async function().then(…args);}
设置为