knex.js 查询“承诺”何时执行/解析?

2024-03-07

对于正常的承诺,一旦当前代码停止,承诺就会尽快解决。考虑以下伪代码:

const p = SomePromiseDoingLoad();
calculatethings();
await sleepPromise();
//during sleep the promise p might/will have resolved already.
await p; //awaiting just makes *sure* the promise is already executed

然而,这如何转化为像 knex 这样的查询生成器呢?似乎没有办法阻止承诺的执行?

const p = knex.select('*').from('table');
//p could be executed now already.
const data = await gatherDataFromWebsite();
//p most probably will have resolved??
p.limit(data.limit) // ???

上面会发生什么,以及我该怎么办prevent这可能会发生吗?毕竟,节点总是被允许尽快解决承诺,所以仅仅链接点就可以让它解决?

const p = knex.select('*').from('table').limit(5); 
let q = knex.select('*');
q = q.from('table');
q = q.limit(5);

或者说knex在推迟执行的计划背后到底在搞什么鬼把戏?


Knex 查询构建器不是 Promise,而是 Promise/A+ 规范调用的东西thenable.

Knex 仅在调用时执行网络 I/O.then()在查询生成器对象上。只要你还没有打电话.then()在查询构建器对象上,它将简单地链接并返回查询构建器对象而不是 Promise。

The await关键字解析查询生成器并在内部调用其.then()方法因此使用await with a knex查询构建器对象也会导致它返回一个承诺。

这并不是推迟执行。相反,执行是由查询构建器对象(而不是 Promise)触发的.then() method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

knex.js 查询“承诺”何时执行/解析? 的相关文章

  • 如何使弹出窗口出现在我的鼠标进入悬停目标的位置?

    这是一个示例代码 用于显示我的按钮下方的弹出窗口 fn popover defaults extend fn tooltip defaults placement bottom content 现在我希望弹出窗口出现在光标移动的位置 不仅是
  • 茉莉花单元测试 - 测试对象的未定义属性

    我有以下声明 expect A BAR name toEqual foo 由于我的对象 A 具有顶级属性 BAR 并且 bar 具有值 foo 传递 我想测试我的结构以确认属性 NONEXISTINGPROP 尚未定义 例如 expect
  • RequireJS 文本插件和变量连接字符串

    我正在使用 RequireJS 文本插件来加载一些 html 模板 当我将字符串文字传递给 require 函数时 它工作正常 var templateHTML require text templates template name ht
  • 变量前面加双下划线

    我的节点代码中有以下代码片段 var fs require fs fs readdir dirname function err files console log files 为什么变量 dirname 有双下划线 我知道一个下划线是私有
  • 使用 jQuery/JavaScript 将文本框值复制到剪贴板

    我有一个文本框和按钮 如下所示 div class col xs 11 style padding 20px 0 div
  • 自 2012 年 6 月 12 日以来,“未定义”随机附加在我网站上 1% 的请求网址中

    自 2012 年 6 月 12 日 11 20 TU 起 我在我的 varnish apache 日志中看到非常奇怪的错误 有时 当用户请求一页时 几秒钟后我会看到类似的请求 但 url 中最后一个 之后的所有字符串已被 未定义 替换 例子
  • WCF - AsyncPattern=true 或 IsOneWay=true

    我的 WCF 服务中很少有方法需要花费大量时间 生成报告和发送电子邮件 根据目前的要求 要求客户端应用程序只需提交请求 然后不等待整个过程完成 它将允许用户继续在客户端应用程序中执行其他操作 而不是等待整个过程完成 我很困惑该走哪条路 As
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 使用 javascript 调整图像大小以在画布 createPattern 中使用

    我见过一些关于如何调整图像大小的技巧 在 IMG 标签内使用 但我想在里面有一个图像变量 一个 Javascript 调整它的大小 然后使用 a 中的图像 context createPattern 图像 重复 我还没有找到任何提示 关于如
  • 大型应用的回流/布局性能

    我正在使用 GWT 构建一个 HTML 应用程序 其性能总体上是正确的 有时 它会加载 DOM 中的许多对象 并且应用程序会变得很慢 我使用 Chrome 开发者工具分析器来查看时间花在哪里 在 Chrome 下 一旦应用程序被编译 即没有
  • 我可以在不使用 Jquery UI 的情况下获得 Jquery Pulsate Effect 吗?

    我遇到了由于某种原因无法使用 Jquery UI 的情况 我正在尝试在不使用 Jquery UI 的情况下获得 Jquery UI 脉冲效果 与此链接类似 http docs jquery com UI Effects Pulsate ht
  • 不可见的 reCAPTCHA - 缺少必需的参数:sitekey

    我正在为每个带有具有类的按钮的表单动态加载不可见的 reCAPTCHAg recaptcha 我遇到的问题是验证码未正确加载 我不知道为什么 我按照验证码网站上的文档进行操作 但我不确定如何以及为什么会出现此错误 Uncaught Erro
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex
  • window.open 使用 css 样式

    我想设计我的 window open 目前 我的网页上有一些项目由于解析了某个类而打开 然后在新窗口中打开指定的文本 我想更改字体大小 字体和填充等 这是我的 JavaScript 代码
  • 无法从 JSON 请求获取数据,尽管我知道它已返回

    我试图获取从 getJSON 返回的数据 但我无法让它工作 我已经在 search twitter API 上尝试了相同的代码 效果很好 但它不适用于其他网站 我知道数据已返回 因为我在使用检查器时可以找到它 我通过检查器找到的值是 id
  • 在 Firefox 中使用 Javascript 检测键盘布局

    有没有办法在 Firefox 中检测客户端的键盘布局 我知道 Chrome 的答案是肯定的 请参阅https developer mozilla org en US docs Web API Navigator keyboard https
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • 指定在任何 Jest 设置发生之前运行的代码

    tl dr 是 1 我怎样才能让Jest使用原生的require函数可以在任何地方加载我的测试中的所有模块 2 我将在哪里 如何进行修改 即替换为esm加载程序 https github com standard things esm ht
  • 使用 div 或表格来包含链接列更好吗?

    我的页面底部有 3 列链接 每列都放入一个 div 中 所有三个 div 都包装在页面中央的一个大 div 中 这是更适合桌子的东西还是桌子不适合这项工作 您还可以使用 ul http www w3schools com tags tag
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网

随机推荐

  • 在远程机器上递归执行本地定义的python脚本

    我有兴趣编写一个脚本 以便该脚本的唯一副本驻留在我的本地计算机上 但该脚本在远程计算机上执行 可能远程计算机在其他远程计算机上执行该脚本 即 2 个或更多级别的分布式调用树中的递归 实现这一目标的一种方法是一步将脚本复制到远程计算机 然后在
  • ES6:“从'jquery'导入$”真正意味着什么?

    我一开始以为它只是意味着加载 jQuery 模块并在名为 的变量中初始化它 但是 通过将 Atom 与 A tom TypeScript 一起使用 我收到一条错误消息 指出 找不到模块 jquery 尽管所有代码都可以在浏览器中运行 但看起
  • Android - android.os.NetworkOnMainThreadException

    我有这个例外 我正在阅读关于此的线程 它似乎令人困惑 如何修复 android os NetworkOnMainThreadException https stackoverflow com questions 6343166 androi
  • 从 Javascript 对象创建 HTML 标签

    更改此对象的最佳方法是什么 src img jpg title foo 转化为有效的HTML 标签字符串像这样 img src img jpg title foo 解决方案1 使用 jQuery 这很容易 但很复杂 img attr obj
  • DefaultValue 属性反序列化

    我正在尝试将流反序列化为具有默认值属性的对象 并且当流中缺少这些属性时 protobuf net 只是忽略这些属性 在反序列化之前 我是否需要手动将所有属性设置为默认值 The DefaultValues行为 不仅仅是在 protobuf
  • StreamContent 和 ByteArrayContent webApi 的差异

    我在整个网络上进行了搜索 但找不到答案 我们的应用程序中有两种方法 a 第一个返回HttpResponseMessage里面有 1 个文件 它用StreamContent response Content new StreamContent
  • Javascript 中箭头函数(粗箭头=>)的确切解析优先级是什么?

    我遇到了一个例子eslint 文档 https eslint org docs rules no confusing arrow关于箭头函数 The intent is not clear var x a gt 1 2 3 所以我对箭头函数
  • 禁用 pylon 中的浏览器缓存

    我有一个操作 json 从服务器返回 json 不幸的是 在 IE 中 浏览器喜欢缓存这个 json 我怎样才能使该操作不缓存 确保您的响应标头具有 Cache Control no cache Pragma no cache Expire
  • 如何在 MySQL 中向值附加回车符?

    我正在导入一些餐厅信息 但发现我缺少描述字段中的菜肴类型 如何在值后面附加回车符 这就是我到目前为止所拥有的 我希望菜肴能换上新的路线 select concat field id 20 r french from table 如果您想要一
  • 使用 POI jar 获取 Excel SheetNames

    我需要使用 POI jar 的所有 Excel 工作表名称 所有包含数据的内容 像 jxl jar getSheetNames 你没有说你想要什么 所以我会猜测一个清单 您只需要迭代工作表索引 获取每个索引的名称 你的代码会是这样的 Fil
  • Selenium IDE 和 xpath - 在表中查找文本/行并选择单选框

    我一直在使用 Selenium IDE 并取得了一些不错的结果 我已经阅读了很多有关跟随兄弟姐妹和先前兄弟姐妹的内容 但我找不到正确的单选按钮 本质上 我想在表中找到带有 测试 一词的行 然后单击单元格中的单选按钮 到目前为止我可以找到输入
  • 如何将逗号分隔的字符串转换为列表?

    Java 中是否有任何内置方法允许我们将逗号分隔的字符串转换为某个容器 例如数组 列表或向量 或者我需要为此编写自定义代码吗 String commaSeparated item1 item2 item3 List
  • 希伯来语问题 - MySql,c#

    我在将希伯来语字符串插入 MySql 时遇到问题 介绍 我将MySql设置为Utf8 我将表设置为字符集 utf8 排序规则为 uft8 general ci 我将连接字符串设置为 Server 数据库 Uid Pwd 字符集 utf8 我
  • 打包一个可运行的 JPA jar,将 persistence.xml 放在外面

    我想将我的 jpa swing 项目导出到可运行的 jar 中 但我希望 persistence xml 位于 jar 之外而不是打包在里面 这样我就可以更改它 而无需在每次配置后再次导出 jar 根据 JPA 规范 persistence
  • ios - 多个导航控制器之间的导航

    我试图理解使用 和不使用 NavigationController 在 ViewController 之间导航的行为 并且在阅读文章和文档时我误解了一些事情 所以我决定问他们 主要问题是 如果故事板中有多个导航控制器并且想要从一个导航控制器
  • cython 做了哪些 numpy 优化?

    我有点惊讶地发现 fast ops c pyx cimport cython cimport numpy as np cython boundscheck False turn off bounds checking for entire
  • C++ 打印指针的值

    我有一个双指针数组 但每次我尝试打印其中一个值时 都会打印地址 如何打印实际值 cout 有人知道吗 如果它确实是一个 初始化的 双指针数组 即 double arr Initialize individual values 所有你需要的是
  • UIDatePicker设置最小和最大小时

    如何设置 UIDatePicker 的最小和最大小时 到底有可能吗 我知道如何设置最小和最大日期 datePicker setMinimumDate 今天 datePicker setMaximumDate nextMonthDay 我想要
  • 如何进行多对多 Django 查询来查找具有 2 个给定作者的书籍?

    我有一个查询 需要使用 ID 精确过滤 2 位作者 理论上 Book objects filter author id 1 author id 2 这是不可能的 我怎么解决这个问题 干杯 米奇 一开始并不直观 但答案就在我们面前 Book
  • knex.js 查询“承诺”何时执行/解析?

    对于正常的承诺 一旦当前代码停止 承诺就会尽快解决 考虑以下伪代码 const p SomePromiseDoingLoad calculatethings await sleepPromise during sleep the promi