为什么我不能将 Promise.resolve 与 osmosis 实例一起使用?

2024-02-24

我试图理解为什么这些console.log语句的行为不同。我希望他们的行为是一样的:

使用 Node 7。考虑以下情况:

1.Promise.resolve(对象)

Promise.resolve按照我的预期处理对象:

Promise.resolve({ a: `hello` }).then(console.log) // { a:'hello' }

2. 直接console.log来自库的类实例。

如果我存储一个 Osmosis 实例,我可以 console.log 它:

const osmosis = require(`osmosis`)
console.log(new osmosis.get(url)) 
/* { prev:                                                                                                                                                                   
     { instance: Osmosis:1,                                                                                                                                                 
     name: 'get',                                                                                                                                                         
     args: [ 'http://www.google.com', ,  ],                                                                                                                               
     getURL: [Function: getURLArg],                                                                                                                                       
     url: 'http://www.google.com',                                                                                                                                        
     params: undefined,                                                                                                                                                   
     cb: [Function: Get],                                                                                                                                                 
     next: [Circular] } }
*/

3. Promise.resolve(类实例)

但如果我尝试解决渗透实例,我看不到奇偶校验:

Promise.resolve(new osmosis.get(url)).then(console.log) // nothing

这里发生了什么?我是否误解了什么Promise.resolve()...? Or console.log?

鉴于 [1] 中的行为,为什么 [3] 的日志与 [2] 不同?

Context:我认为我当前的实际目标对于回答这个问题并不重要。但以防万一,你还是走吧。我不明白库本身的任何内容应该如何影响最终示例的输出。这是有关该内容的文档new osmosis.get()尽管:http://rchipka.github.io/node-osmosis/Osmosis.html#toc1__anchor http://rchipka.github.io/node-osmosis/Osmosis.html#toc1__anchor

new osmosis.get(url)不执行异步 http 请求。它实例化了一个抓取器的实例,该实例可以使用一组声明性指令来构建,并被告知在稍后的任意时间“运行”。

出于几个原因,我希望能够在承诺链中构建这组指令。

主要的一点是,它将是将指令定义分解为更容易测试和理解的不同函数的最简单方法。例如代替osmosis.get(url).set({some stuff}).find(@something), 我想:

function defineSearch(instance){
  return instance.set({some stuff})
}

function definePath(instance) {
  return instance.find(@something)
}

Promise.resolve(new osmosis.get(url))
  .then(defineSearch)
  .then(definePath)
  .then(instance => instance.run())

该文档非常糟糕,并且使用了相当非常规的技术。什么new osmosis.get(url)返回不是一个Osmosis http://rchipka.github.io/node-osmosis/Osmosis.html实例但是一个Command http://rchipka.github.io/node-osmosis/Command.html一。那些确实有一个then method http://rchipka.github.io/node-osmosis/Command.html#then__anchor.

当你传递东西给Promise.resolve,它被测试为thenable https://stackoverflow.com/a/29437927/1048572或不是,如果它看起来像一个承诺,它就会被尝试同化:一个回调被传递到then将解决新承诺的方法。

所以当你这样做时Promise.resolve(new osmosis.get(url)),你会得到一个未解决的承诺,当then调用回调(运行命令时发生)。就你而言,它永远不会。

解决您的特定问题的方法是根本不使用承诺(因为您没有执行任何异步操作):

definePath(defineSearch(new osmosis.get(url))).run())

但你可能还应该报告一个错误Command看起来像是具有适当thenable的promise,这破坏了ES6中的很多东西。

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

为什么我不能将 Promise.resolve 与 osmosis 实例一起使用? 的相关文章

随机推荐

  • 返回Task的接口的同步实现

    如同在同步代码中实现需要 Task 返回类型的接口 https stackoverflow com questions 26352034 implementing an interface that requires a task retu
  • 如何不在链接中的元素下划线?

    我试图在链接上加下划线 但 myspan 元素除外 在任何情况下我都不希望在该元素下加下划线 我还想更改 myspan 的颜色 规则似乎并不适用于此 如果我颠倒顺序并且不在 a 下划线而是在 myspan下划线 则似乎适用了规则 我见过此链
  • 在 Node 中使用 Postgres 的 Sequelize 请求查询日期范围

    我想做的是使用 Node js 中的 Sequelize ORM 获取两个日期之间的行 我正在使用 PostgreSQL 问题是 Sequelize 错误地解释了我提出的请求 这是我用来发出请求的代码 const dbresp await
  • 未找到无服务器命令“离线”

    我正在运行我的nodejs代码并且还安装了无服务器 npm i g 无服务器 但是在使用命令运行它时sls offline start CacheInvalidations我收到错误如下 无服务器错误 未找到无服务器命令 离线 您指的是 c
  • Android,.txt 电子邮件附件未通过意图发送

    我正在测试创建一个 txt 文件 然后通过意图将其作为电子邮件附件发送 创建 txt 文件 try String fileName testFileName txt File root new File Environment getExt
  • 从 maven 在 nexus 中部署工件会出现错误“返回代码是:401”?

    我在 Nexus 中部署时收到 401 错误 我没有对已安装的 Nexus 进行任何更改 Nexus 正在运行localhost 8080 nexus我可以使用默认用户 密码登录 当我跑步时mvn deploy我收到这个错误 这是我的 PO
  • 将所有数据框字符列转换为因子

    给定一个包含各种类型列的 预先存在的 数据框 将其所有字符列转换为因子而不影响任何其他类型列的最简单方法是什么 这是一个例子data frame df lt data frame A factor LETTERS 1 5 B 1 5 C a
  • 使用 JPA Criteria API,您可以执行仅产生一个连接的获取连接吗?

    使用 JPA 2 0 似乎默认情况下 没有显式获取 OneToOne fetch FetchType EAGER 字段在 1 N 次查询中获取 其中 N 是包含定义与不同相关实体的关系的实体的结果数 使用 Criteria API 我可能会
  • Openpyxl - 对象没有属性“load_workbook”

    我正在尝试使用 openpyxl 加载现有工作簿 但当我试图奔跑时这段代码 http packages python org openpyxl usage html read an existing workbook 我收到以下错误 Att
  • ASP.NET Core 3.1 无法取消保护消息。状态在调试器中运行

    我已使用默认模板从 VS 2022 创建了 ASP NET Core 3 1 Web 应用程序 并选择 Microsoft Identity 来使用 Azure AD 身份验证 向导在我的 Azure AD 租户中生成了应用程序注册 一切看
  • 是否可以创建一个剪切的div?

    是否可以创建一个剪切 倾斜的标题 div 如下图所示 它适用于移动网站 是的 这是可能的 DEMO http jsfiddle net jbutler483 2qmmpmb9 2 wrapper overflow hidden height
  • 媒体查询/根据屏幕尺寸加载不同的图像

    这可能是基本的 但我迷失在我在网上找到的所有解决方案中 我有一个基于 Twitter Bootstrap 3 的正在运行的网站 www webstalab com 但使用的图像 描绘了两个拿着球的雕像 相当大 大约 900kb 因此在较慢的
  • 将 War 部署到 Mule 独立服务器中

    我有一个 mule 独立服务器 其中包含我正在开发的应用程序 该应用程序使用的许多服务将来将从 Mule 容器移至 JBoss 集群中 因此 我在 Mule 流和 Web 服务之间保持了严格的分离 然而 截至目前 我需要将 War 文件部署
  • 如何在 Maven 中包含/引用 jackson-all.jar

    我无法找到 jackson all jar 的存储库条目 不知道为什么我可以看到单独的杰克逊罐子信息 所以 如何引用 jackson all jar 对于 杰克逊 2 请查看com fasterxml jackson http search
  • awk 中的字符串比较

    我需要按字母顺序比较两个字符串 而不仅仅是相等测试 我想知道有没有办法在 awk 中进行字符串比较 当然可以 pax echo hello goodbye gawk if 0 hello print HELLO HELLO 你也可以做不等式
  • 将内部 div 不透明度设置为 1,但不生效

    我有一个带有背景图像和背景颜色的 div 我把这个div的不透明度设置为0 7 之后 我在这个 div 内部创建了一个内部 div 但我不想给这个 div 带来不透明度 这是我的CSS代码 outer position relative b
  • System.Windows.Forms.SaveFileDialog 不强制执行默认扩展名

    我正在努力使SaveFileDialog and FileOpenDialog对用户输入的文件名强制执行扩展名 我尝试过使用中提出的示例问题 389070 https stackoverflow com questions 389070 h
  • 为网站实现字体?

    我在 CSS 中使用字体 AR CENA 但在浏览网站时它没有加载字体 对我来说它运行良好 但我认为因为我已经安装了字体 所以它从我的电脑加载它 有没有办法实现这种字体并正常出现在网站上供用户使用 u2966 5 z index 500 w
  • 如何从 python 中激活 pyvenv virtualenv? (activate_this.py 被删除了?)

    我正在使用 Python 3 4 并创建了 pyvenv 我希望从 python 进程中激活它 对于 virtualenv 我曾经使用过activate this py 但这似乎在 pyvenv 中消失了 现在有没有一种简单的方法可以有效地
  • 为什么我不能将 Promise.resolve 与 osmosis 实例一起使用?

    我试图理解为什么这些console log语句的行为不同 我希望他们的行为是一样的 使用 Node 7 考虑以下情况 1 Promise resolve 对象 Promise resolve按照我的预期处理对象 Promise resolv