Promise catch() all() Race()

news/2024/7/8 11:35:36

catch()

.catch()方法是.then(null, rejection).then(undefined, rejection)的别名,用于指定发生错误时的回调函数。

Promise 对象状态变为resolved,则会调用then()方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch()方法指定的回调函数,处理这个错误。另外,then()方法指定的回调函数,如果运行中抛出错误,也会被catch()方法捕获。

案例

// 写法一
const promise = new Promise(function(resolve, reject) {
  try {
    throw new Error('test');
  } catch(e) {
    reject(e);
  }
});
promise.catch(function(error) {
  console.log(error);
});

// 写法二
const promise = new Promise(function(resolve, reject) {
  reject(new Error('test'));
});
promise.catch(function(error) {
  console.log(error);
});

如果 Promise 状态已经变成resolved,再抛出错误是无效的。

一般来说,不要在then()方法里面定义 Reject 状态的回调函数(即then的第二个参数),总是使用catch方法。

建议写法

  

promise
  .then(function(data) { //cb
    // success
  })
  .catch(function(err) {
    // error
  });

all() 

 all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.all([p1, p2, p3]);

Promise.all()方法接受一个数组作为参数,p1p2p3都是 Promise 实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为 Promise 实例,再进一步处理。另外,Promise.all()方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。

p的状态由p1p2p3决定,分成两种情况。

(1)只有p1p2p3的状态都变成fulfilledp的状态才会变成fulfilled,此时p1p2p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1p2p3之中有一个被rejectedp的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。


http://www.niftyadmin.cn/n/3655753.html

相关文章

同样指令bmp.LockBits不同平台(Windows/WinCE)获取位图的数据不同

最近做了一个获取位图(24位位图)数据的程序,代码如下:Bitmap bmp newBitmap(BmpFile); //获取位图的数据 System.Drawing.Imaging.BitmapData bmpData bmp.LockBits(newRectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.…

用拖拉实现设备驱动配置(EsayHMI最新驱动配置方式)

以前的IOServer 是用VB6开发,驱动的配置方式和一般的组态软件没有什么很大的区别,配置起来比较麻烦,对一般的生手来说,要费一番功夫才能配置完毕。总觉得原有的程序和目前的HMI图元配置环境格格不入,所以重新编写了驱动…

如何用C#显示竖排文字?

看这个题目,应该觉的这个问题不难,刚开始我也是这么想,可是目前我手头上的参考资料上没有一个介绍竖直显示文字的,上网查资料只发现一个有用的,可是实现起来比较麻烦,需要进行坐标转换,旋转&…

.net精简框架集(WinCE平台下),XML反序列化成功与否与时间相关

在WinCE 4.2(.net精简框架集 2.0) 下反序列化一个XML文件,发现反序列化成功与否和时间相关。装有WinCE平台的触摸屏由于电池的原因,时间丢了,初始化时间为,1570年月日。此时反序列化提示XML文件有问题,序列化失败 。后…

如何让不支持遍历的数据可遍历

let authors {allAuthors:{fiction:["周","吴","郑"],scienceFiction:["王赵","钱孙","冯陈"],fantasy:["蒋沈韩杨","朱秦尤许","何吕施张"]},addres:[]}authors[Symbol.iterator…

嵌入式组态环境升级及XML反序列化慢的困惑

嵌入式组态开发比较顺利,V1.0α版本已经推出,再过几天应该推出V1.0β了。但是目前该组态有一个很大的问题,就是XML反序列化较慢,在上位机(PC)不是很明显,大约1~3秒就可以反序列化完毕…

3.7打卡 iincludes数组查询math.pow简写** 和promise语法糖async/await

1, includes 对数组进行查询 返回结果 true / false 2. Math.pow(4, 3); 数值,表示 x 的 y 次幂 (xy) 的值。 简写 ** 两个星号 比promise 跟优雅的异步方式 async function firstAsync(){let promise new Promise((resolve, reject) > {setTimeout(function …

VS2005 IDE开发环境两个不好的特性

用VS2005开发程序几个月来,感觉有两个地方很不方便,不知道是VS2005开发人员考虑不周,还是我不知道如何使用或调整。第一个:在多个控件选定的时候,默认当前选定的控件仅是第一次选定的控件,此外不能更改。不…