【发布时间】:2020-12-16 08:39:48
【问题描述】:
我试图了解await 关键字是如何在 KNEX 中使用的。举个例子:
knex.schema.createTable( ... );
这将返回this,它是SchemaBuilder 的一个实例。它不会在数据库中执行创建表查询。但是,如果我坚持和await 在它前面。
await knex.schema.createTable( ... );
这将在数据库中执行创建查询。
我的理解是 await 用于等待承诺解决,但在这种情况下,感觉就像发生了其他事情,因为不是 awaiting 函数不会返回承诺。
这是如何工作的?
【问题讨论】:
-
这是我的理解,但如果我不
await函数调用它肯定不会在数据库中创建表。与我使用await相比,它将执行查询,并且表将出现在数据库中。 -
@T.J.Crowder 前一个表达式只是创建了一个SchemaBuilder,后一个表达式调用了SchemaBuilder的
.then()方法。 -
@Bergi - 为什么,为什么我没有想到自定义 thenable??
-
@Bergi 你是对的!我没有意识到你可以设置一个 then 原型,当你使用
await时会调用它。await fn()只是fn().then()的语法糖。谢谢!
标签: javascript node.js design-patterns async-await knex.js