javascript – 在fetch’ then’方法中调用拒绝函数时“未捕获(在承诺中)”

前端之家收集整理的这篇文章主要介绍了javascript – 在fetch’ then’方法中调用拒绝函数时“未捕获(在承诺中)”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是有问题的代码
new Promise((resolve,reject) => {
  const opts = {
    credentials: 'same-origin',};

  fetch(`/_api/myAPI`,opts)
  .then((res) => {
    if (!res.ok) {
      reject(res);
    } else {
      ...

如果url抛出异常401,则执行到达reject(res);它抛出未捕(承诺)

即使我在.then调用添加.catch,即

fetch(`/_api/myAPI`,opts)
  .then((res) => {
    if (!res.ok) {
      reject(res);
    } else {
      ...
   })
  .catch((e) => {
    console.log(e);
   }

它仍然发生.

为什么拒绝会抛出此异常,我该如何解决?我的经验仅限于jQuery.Promise,我不会在失败处理程序中拒绝将触发此错误.

解决方法

当你拒绝承诺时,你会立即拒绝包装整个操作的承诺,所以你永远不会得到那个catch块.

类比:拒绝和决心是承诺,因为回归是功能.

我想你要做的是下面的代码.

new Promise((resolve,};
  fetch(`/_api/myAPI`,opts)
  .then((res) => {
    if (!res.ok) {
      return Promise.reject()
    } else {
      ...
      resolve(...);
   })
  .catch((e) => {
    console.log(e);
    reject();
   }
}

猜你在找的JavaScript相关文章