then() 方法内的 Promise.resolve 未传递其解析值

2023-12-20

我发现了一个关于 Promise 的有趣的事情。当我运行以下代码时,它给出了“aa”的输出,而不是“bb”,这让我很困惑。有谁明白为什么并给出解释吗?谢谢!

Promise.resolve('aa')
.then(Promise.resolve('bb'))
.then(console.log);

好吧,你滥用了.then()处理程序,因此您没有得到所需的答案也就不足为奇了。

A .then()处理程序应该传递一个函数引用。你向它传递了一个承诺,但它会尽职地忽略它,因为它不是一个可调用的函数。

当你这样做时:

.then(Promise.resolve('bb'))

即执行Promise.resolve('bb')立即并将返回结果(这是一个承诺)传递给.then()。所以,你正在传递一个承诺.then()当你应该传递函数引用时。如果您将代码更改为此,那么您将得到您所期望的结果:

Promise.resolve('aa')
    .then(function() {return Promise.resolve('bb');})
    .then(console.log);

请记住,将某些东西传递给.then()是它可以在父承诺解析/拒绝时稍后执行。因此,为了实现这一点,您必须传递一个函数引用,该函数引用可以在稍后的某个时间由 Promise 基础结构调用。

使用 ES6 语法,您可以缩短为:

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

then() 方法内的 Promise.resolve 未传递其解析值 的相关文章

  • Promise.resolve().then 与 setImmediate 与 nextTick

    NodeJS 0 11 以及 io js 和 Node 0 12 分支都带有原生 Promise 原生承诺have a then method https developer mozilla org en US docs Web JavaS
  • 如何返回许多 Promise 并在执行其他操作之前等待所有 Promise

    我有一个循环 它调用一个异步执行操作的方法 这个循环可以多次调用该方法 在这个循环之后 我有另一个循环 仅当所有异步工作完成时才需要执行 所以这说明了我想要的 for i 0 i lt 5 i doSomeAsyncStuff for i
  • VueJS 中只有在调度和提交完成后才触发路由

    我确实有一个表单提交 它需要电子邮件和密码 然后将它们传递到商店中名为的操作中userSignIn 登录 vue onSubmit if this refs form validate const user email this email
  • Promise.all 与 Firebase DataSnapshot.forEach

    我有几个 HTML 选择 下拉菜单 它们是从名为 states 的 Firebase 节点填充的 见下图 选择城市后 将触发以下函数并检索该城市中发生的所有会议 有一个单独的 会议 节点 每个会议都有各种键 值对 例如街道 时间等 我 认为
  • 如何从异步函数返回 Promise?

    当我尝试从异步函数返回 Promise 时 无法区分返回的 Promise 和函数的状态 我认为 最简单的解决方案是将要返回的承诺放在数组中 下面是一个愚蠢的例子 但我希望它能说明问题 function loadMetaData id Re
  • Promise 回调中的单元测试逻辑

    我有一个 ES6 Aurelia 应用程序 我正在使用 jasmine 来测试 我试图测试的方法看起来像这样 update let vm this vm getData then response gt vm processData res
  • 未处理的拒绝错误 Bluebird

    我有以下代码 它按预期工作 不会引发未处理的拒绝错误 p new Promise fulfill reject gt reject new Error some error p catch error gt console log erro
  • 如何将 Firestore 查询转换为 Javascript 数组

    我正在尝试导出一个 firestore 函数 该函数执行查询并返回包含该查询中的对象的数组 我正在尝试从文档的子集合中获取数据 并获取返回的文档对象数组以呈现给客户端 我已经尝试了以下方法 但它不起作用 例如 对象返回空白 我认为这与承诺处
  • “等待返回”有什么区别吗? [复制]

    这个问题在这里已经有答案了 有什么区别吗 const foo async gt some other code that uses await return await bar and const foo async gt some oth
  • 是什么让 `async/await` 语句在 ES6 中顺序运行与并行运行?

    我已经浏览过该线程wait Promise all 和多个await 之间有什么区别 https stackoverflow com questions 45285129 any difference between await promi
  • 在 ngOnInit Angular 之前处理异步 Promise

    我有一个返回表数据的请求 需要像等待数据加载的承诺一样处理该请求 为了将数据加载到表中 我必须使用异步 等待 但这会弄乱所有其他函数 方法 如何在 ngOnInit 上不使用 async wait 的情况下将数据存储在 currentLis
  • 异步/等待清晰,以睡眠为例

    我试图通过下面的实现来掌握 async await 的窍门 但它没有按预期工作 public static async sleep ms number Promise
  • 已等待但从未解决/拒绝承诺内存使用[重复]

    这个问题在这里已经有答案了 Will awaiting a Promise既不解决也不拒绝 从不解决 未实现 导致内存泄漏 在查看 React hooks 时我对此感到好奇slorber awesome debounce promise h
  • ES6 Promise.all 进度

    在进一步行动之前 我有几个需要解决的承诺 Promise all promises then results gt going further 有什么办法可以让我取得进展吗 Promise all承诺 从文档看来 这不可能 https de
  • 在某些情况下省略“等待”是否合法?

    我在用async await在我的代码中的几个地方 例如 如果我有这个功能 async function func x return y 然后我总是这样称呼它 async function func2 x let y await func
  • Angular 2 链式 Promise 并传递拒绝

    应该是一个简单的问题 但是我找不到有关如何做到这一点的文档 像这样链接一个承诺 Making a promise no problem let promise new Promise resolve reject gt let data d
  • 何时不使用承诺[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在阅读了数十篇关于 es6 Promise 有多伟大以及为什么我们应该实现它们的文章之后 我有这样的感觉 ALL我的 不平凡的 JavaScri
  • 返回承诺与在承诺内返回未定义之间的区别

    我不太确定我是否理解这两种常见场景之间的区别 假设我们有这个 user save then function val anotherPromise1 val then function val anotherPromise2 val cat
  • 是否可以在 Promise.all 稍后向数组添加 Promise?

    我正在做一个项目 我问自己启动这个项目是否可行Promise all在 Javascript 中 他们确实向数组添加了更多 Promise 的任务 以及它们是否也在运行 const runAsyncFunctions async gt co
  • 在不调用“then”的情况下解决 Promise

    我有这段代码 它是我为一个名为 Poolio 的 NPM 模块编写的小型 API 的一部分 对于那些支持错误优先回调和承诺的人来说 我遇到的问题似乎是一个常见问题 我们如何在支持两者的同时保持一致的 API 和 API 的一致返回值 例如

随机推荐