Promise 对象方法总结

ECMAscript 6 原生提供了 Promise 对象。

Promise

Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息,是一套异步操作处理机制。

Promise对象解决回调地狱层层嵌套的问题。

通过then方法分别制定resolved状态和rejected状态的回调函数。

一、Promise特点

  • 可以在一系列异步操作中,灵活地处理错误,避免了层层嵌套的回调函数。

Promise 也有一些缺点。首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

二、Promise的创建

const promise = new Promise(function(resolve, reject) {
    
    
  // ... some code
 
  if (/* 异步操作成功 调用resolve */){
    
    
    resolve(value);
  } else {
    
    
    /* 异步操作失败 调用reject */
    reject(error);
  }
});

resolve:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;

​ reject:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去;

三、Promise.prototype.then()

Promise实例生成以后,可以用then方法(then方法是定义在原型对象Promise.prototype上的。它的作用是为 Promise 实例添加状态改变时的回调函数。)、catch方法分别指定Resolved状态和Rejected状态的回调函数:

ew Promise(function(resolve,reject) {
    
    
    let num = Math.random() * 2;
    console.log("产生的随机数为:" + num);
    setTimeout(function () {
    
    
        if(num < 1) {
    
    
            console.log("执行成功");
            resolve("200 OK");
        } else {
    
    
            console.log("执行失败");
            reject("失败原因num为:" + num);
        }
    }, num * 1000);
}).then(function(r) {
    
    
    console.log("then:" + r);
}).catch(function(j) {
    
    
    console.log("catch:" + j);
});

四、Promise.prototype.catch()

Promise.prototype.catch()方法用于指定发生错误时的回调函数。

const p1 = new Promise(function cb(resolve, reject) {
    
    
    setTimeout(() => {
    
    
        console.log('欢迎')
        reject()
    }, 3000)
})
p1.then(_ => {
    
    
    setTimeout(() => {
    
    
        console.log('谢谢光临')
    }, 2000)
}).catch(_ => {
    
    
    console.log('出错了')
})

当promise抛出一个错误,就被catch()方法指定的回调函数捕获。

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

扫描二维码关注公众号,回复: 12262060 查看本文章

五、Promise.prototype.finally()

finally()方法返回一个Promise
在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise是否成功完成后都需要执行的代码提供了一种方式。

这避免了同样的语句需要在**then()catch()**中各写一次的情况。

p.finally(onFinally);

p.finally(function() {
    
    
   // 返回状态为(resolved 或 rejected)
});

参数:

  • onFinally
  • Promise 结束后调用的Function。

返回值:

  • ​返回一个设置了 finally 回调函数的Promise对象。

六、Promise.all()

Promise.all(iterable)方法返回一个实例,此实例在 iterable参数内所有的promise都“完成(resolved)或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败的原因是第一个失败 promise 的结果。

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
    
    
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
    
    
  console.log(values);
});
// expected output: Array [3, 42, "foo"]

参考大佬:https://blog.csdn.net/m0_46532221/article/details/106528918

猜你喜欢

转载自blog.csdn.net/Menqq/article/details/111395911