【问题标题】:Promise resolve call is unnecessary? [duplicate]承诺解决电话是不必要的? [复制]
【发布时间】:2020-06-13 02:14:58
【问题描述】:

我无法理解Promise.resolve

我正在为 fetch 编写一个非常简单的包装器,以避免必须编写 then 来访问 JSON。我在网上找到了一段代码sn-p,看起来有点像这样:

  function get(url) {
    return fetch("/api/" + url, {
      method: "GET",
      credentials: 'include'
    }).then(response => {
      if (response.ok) {
        return response.json().then(json => {
          return Promise.resolve({ data: json, response: response });
        }).catch(err => {
          return Promise.resolve({ response: response });
        });
      } else {
        return response.json().catch(err => {
          throw new Error(response.statusText);
        }).then(json => {
          throw new Error(json.error.message);
        });
      }
    });
  }

但是,您似乎不需要 Promise.resolve 函数调用。我尝试删除它们并只写return { data: json, response: response };,它仍然有效。

resolve 电话有什么作用吗?有必要吗?

【问题讨论】:

  • 不,没有必要
  • 所以这只是一个空操作?为什么他们被包括在内?用户错误?
  • 没有必要在这样的处理程序中使用 Promise.resolve 或 Promise.reject ;这些方法旨在为您提供一种开始承诺链的方法,而不是继续。
  • 不,它们不是必需的。如果您从 then 返回某些内容,您仍然可以将其与另一个 then 链接,因为它是 Promise - 无需明确说 return Promise.resolve()
  • 好的,感谢您的快速响应!

标签: javascript promise


【解决方案1】:

resolve 调用有什么作用吗?

是的,他们将值包装到使用该值解析的 Promise 中。当您从 .then 中返回它们时,.then 方法返回的 Promise 将解析为与返回的 Promise 解析为相同的值。

它们有必要吗?

没有。

【讨论】:

    猜你喜欢
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2015-12-07
    • 2015-06-24
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多