【问题标题】:Javascript Promises, Returned Promise of then and catch methodJavascript Promises,返回的 Promise 和 catch 方法
【发布时间】:2018-09-29 21:18:15
【问题描述】:

在用 Promises 玩弄了一下,这里是代码:

let prom1 = new Promise((res, rej) => {
  res('res');
});

const resolvedProm1 = prom1.then((val) => {
  return val
});
console.log(resolvedProm1);

let prom2 = new Promise((res, rej) => {
  rej('rej');
});

const resolvedProm2 = prom2.catch((err) => {
  return err
});
console.log(resolvedProm2);

chrome devtools 显示以下有关承诺的信息:

但是,我没想到会出现这种特殊的输出。我的预期如下:

  • resolvedProm1 和 resolvedProm2 都是 <fullfilled> Promises 而不是 <pending>。为什么它们处于待处理状态且未完成?
  • resolvedProm2被拒绝,为什么promiseStatus显示已解决?

【问题讨论】:

标签: javascript asynchronous ecmascript-6 promise es6-promise


【解决方案1】:

在这两种情况下,promise 都会在它们被解决之前打印出来。您发送到 Promise 上下文中的内容将始终在您当前的调用堆栈展开后执行,因此控制台会首先运行,直到函数结束。

【讨论】:

    【解决方案2】:

    resolvedProm1resolvedProm2 都是 Promises 而不是 .为什么它们处于待处理状态且未完成?

    因为它们是异步解决的。您正在记录它们,而它们仍处于挂起状态。如果您在 thencatch 回调中添加一些 console.log 语句,您会注意到回调还没有执行。

    当您检查开发工具中的 promise 值,您在 解决它们之后执行此操作。

    resolvedProm2被拒绝了,为什么promiseStatus显示已经解决了?

    不,您拒绝了prom2resolvedProm2.catch() 调用的结果,其回调处理拒绝并返回非错误结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 2019-08-07
      • 2018-07-12
      • 1970-01-01
      • 2021-11-29
      • 2019-01-14
      • 1970-01-01
      相关资源
      最近更新 更多