美文网首页
promise用法

promise用法

作者: 二荣xxx | 来源:发表于2021-07-04 22:40 被阅读0次

一、基本用法

生成promise实例

const promise1 = function(){
  return new Promise((resolve,reject)=>{
    if('成功'){
       resolve('成功结果') 
    }else{
      reject('失败结果')
    }
  })
}
// promise返回一个新的promise可以用then链式调用

注意:resolve和reject都只接受一个参数
promise对象有两种变化状态,pending-resolved或pending-reject(promise状态变化后就固定了),resolve的作用是将promise从待定变为成功(pending-resolved),并在异步操作成功时调用,并将异步操作的结果作为参数传递出去;reject是在异步操作抛出错误时调用,并将错误信息作为参数传递出去

二、promise.then

Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。promise异步操作返回一个全新的promise实例,可以链式调用then方法,promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

promise1.then(
  (value)=>{console.log(vlue)}, //成功
  (error)=>{console.log(error)} //失败
).then((value)=>{}) //value是上一个promise实例操作成功的结果

  // 阮一峰promise例子
    function timeout(ms) {
      return new Promise((resolve) => {
        setTimeout(resolve, ms, "done"); // done 是resolve的参数
      });
    }
    timeout(2000)
      .then((value) => {
        console.log(value); //done 
    })

三、Promise.prototype.catch()

ES规定异步操作不能用try/catch捕获错误,promise在原型上定义了个catch方法,可以用来链式的捕获错误

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

const promise3 = new Promise(() => {
      throw new Error("test");
    });
    promise3
      .then(() => {
        console.log("hihihi"); // 不执行
      })
      .catch((error) => {
        console.log(error);
    });
  // 一个promise执行后只有resolve和reject两种状态,状态一旦改变就不再变化
  //所以成功的log不执行

promise对象的错误具有冒泡性质,发生的错误信息回向下传递,直到被下一个catch捕获

四、Promise.prototype.finally()

finally 方法用于指定不管 Promise 对象最后状态如何都会执行finally,finally不接受参数,finally与前面的执行状态无关,不依赖前面的执行结果

    const promise4 = new Promise((resolve, reject) => {
      console.log(x + 1);
    });
    promise4
      .then(() => {
        console.log("你好");
      })
      .catch((err) => {
        console.log(err);
      })
      .finally(() => {
        console.log("finally");
      });
      // finally

finally方法总是会返回原来的值。(前一个实例的结果)

五、Promise.all()

Promise.all()接受多个promise:p1,p2,p3,包装成一个新promise,只有当p1,p2,p3全部为fulfilled(成功),这个新的promise才会是fulfilled(成功)此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。,只要有一个为reject,这个新的promise就是reject

const p = Promise.all([p1, p2, p3]);
const promises = [2, 3, 5, 7, 11, 13].map(function (id) {
  return getJSON('/post/' + id + ".json");
});

Promise.all(promises).then(function (posts) {
  // ...
}).catch(function(reason){
  // ...
});

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

六、Promise.race()

Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。率先返回的promise的状态就是新promise的状态,最先改变的promise的返回值传给p的回调函数。

const p = Promise.race([p1, p2, p3]);
const promises = [2, 3, 5, 7, 11, 13].map(function (id) {
  return getJSON('/post/' + id + ".json");
});

Promise.race(promises).then((posts) =>{}).catch((reason)=>{});

七、Promise.any()

Promise.any()方法也是接受一组promise作为参数,包装成一个新promise对象,只要有一个参数实例是成功状态,那新promise就是成功状态,参数实例全为rejected状态新promise才为rejected状态。(和Promise.all()类似于且和或的关系

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

可以用此方法捕获错误

Promise.any(promises).then(
  (first) => {
    // Any of the promises was fulfilled.
  },
  (error) => {
    // All of the promises were rejected.
  }
);

相关文章

  • promise详解

    Promise 用法api 1.基本用法 2.简便写法 Promise.all([]) Promise.race...

  • Promise 对象

    Promise 的含义 基本用法 Promise.prototype.then() Promise.prototy...

  • Promise 对象

    目录:Promise 的含义基本用法Promise.prototype.then()Promise.prototy...

  • Promise扩展基础

    Promise.all基本用法: Promise.race基本用法: 直接调用成功状态: 函异步函数:

  • ES6——Promise

    Promise基本用法示例: let i=100; let promise=new Promise(functio...

  • Promise 的使用

    使用Promise 基本用法 A Promise is an object representing the ev...

  • Promise

    一.Promise常见用法 function doSth() { return New Promise(func...

  • 手写Promise

    $ 正常的promise用法   $ 手写的Promise   # 测试可行性

  • ES6-Promise

    参考链接: 1.阮一峰Promise解读 2.Promise用法讲解 Promise含义 Promise是异步编程...

  • Promise对象

    Promise 多个异步回调: 详情关于promise对象的一些讲解 Promise.all() .catch()用法

网友评论

      本文标题:promise用法

      本文链接:https://www.haomeiwen.com/subject/gsfvultx.html