gpt4 book ai didi

node.js - Objection.js 查询构建器如何知道应该何时执行链式调用?

转载 作者:行者123 更新时间:2023-12-04 14:56:57 24 4
gpt4 key购买 nike

来自 docs 的示例await User.query()返回一个包含用户数组的 promise 。await User.query().findById(1)返回一个 ID 为 1 的用户。User.query()怎么办知道什么时候需要执行它或者它是否被链接。
我会假设一次 User.query()被调用时,请求已经传输到数据库服务器,因此无法修改。但是,将它与 .findById(1) 链接起来修改请求,以便使用以下条件构建查询:User.id = 1;然后将其传输到数据库服务器?。这是如何运作的?

最佳答案

User.query()返回一个查询构建器,您可以在其中添加任意数量的链式方法调用:

query = User.query();
query.where('id', 1);
query.limit(1);

// also each method returns `this` as return value so chaining is possible

query.select('id', 'name').where('name', 'like', '%batman%')

现在查询已完成并且您想执行查询构建器并将查询发送到您需要调用的数据库 .then()或者例如用 Promise.resolve(query) 解决它隐式调用查询构建器的 .then方法。
在您的情况下,您使用的是 await触发查询,它实际上只是“Promise.resolve”的语法糖
以下所有执行查询的示例都非常等效

// await with parenthesis underlining execution order of statements
res = await (User.query().select('name'));

// await without parenthesis with implicit execution order
res = await User.query().select('name');

// older way with thenables and promises
User.query().select('name').then(res => {
})

// another way with themables and promises
Promise.resolve(User.query().select('name')).then(res => {

})

所以以上所有案例都调用 .then查询生成器执行查询的方法和 .then返回一个 promise ,它将解决从数据库读取的结果。

关于node.js - Objection.js 查询构建器如何知道应该何时执行链式调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67775350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com