Javascript Knex如何等待执行数据库查询?
我试图了解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等待函数不会返回承诺 这是
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);}
设置为。