承诺解决电话是不必要的? [复制]

Posted

技术标签:

【中文标题】承诺解决电话是不必要的? [复制]【英文标题】: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() 好的,感谢您的快速响应! 【参考方案1】:

resolve 调用有什么作用吗?

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

它们有必要吗?

没有。

【讨论】:

以上是关于承诺解决电话是不必要的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法判断 ES6 承诺是不是被履行/拒绝/解决? [复制]

承诺仍在 then 块中待处理 - 如何解决? [复制]

如何将承诺的返回值分配给变量? [复制]

swiper中解决文字不能复制

ES6 Promise.all() 错误句柄 - 是不是需要 .settle()? [复制]

并行解决承诺