每天掌握一个点-day2

60 阅读2分钟

趁热打铁,今天还是promise的问题

问题2、 什么是Promise?promise的作用

1、什么是Promise

Promise 是异步编程的一种解决方案,可以让异步方法像同步方法一样返回值,异步操作不会立即返回最终结果,通过promise则可以立即执行

2、Promise的几种状态
  • 待定(pending)* :初始状态,既没有被兑现,也没有被拒绝。
  • 已兑现(fulfilled)* :意味着操作成功完成。
  • 已拒绝(rejected)* :意味着操作失败。

状态一旦改变,就不会再变

3、Promise的作用
  • 回调地狱:回调函数层层嵌套,首先可读性较差,如果回调函数中有异步任务,会导致函数无法按顺序执行
  • Promis可以处理多个并发请求
4、Promise的用法
a、构造Promise函数
const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('成功回调');
  }, 300);
});

注:  Promise()只能通过new运算符来构造。如果尝试在没有使用 new 的情况下调用它,会抛出 TypeError 异常。

实例化的promise可以传两个参数:

  • resolve :异步操作执行成功后的回调函数
  • reject:异步操作执行失败后的回调函数
b、链式操作

通过传递的方式及时进行方法的调用

  promise1.then((data) => {
  console.log(data);
  })
  .then((data) => {
  console.log(data);
  })
  .then((data) => {
  console.log(data);
  });
c、resolve和reject的使用
  let promise1 = new Promise((resolve, reject) => {
      //做一些异步操作
      setTimeout(() => {
        var num = Math.ceil(Math.random() * 10) //生成1-10的随机数
        if (num <= 5) {
          resolve(num)
        } else {
          reject('数字太大了')
        }
      }, 2000)
    })
    promise1.then(
      (data) => {
        console.log('resolved', data)
      },
      (err) => {
        console.log('rejected', err)
      }
    )
d、catch的用法

用catch捕获异常

promise1
      .then((data) => {
        console.log('resolved', data)
      })
      .catch((err) => {
        console.log('rejected', err)
      })
e、 Promise.all()方法

并行同步和异步操作,所有方法执行完毕后,返回一个包含所有方法返回值的数组

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);
});

暂时就这些,其他相关方法还要慢慢琢磨,欢迎指正

今天结束,继续敲代码了,拜拜大家!!!!!