JavaScript异步编程:(二)Promise初识

2022-05-16  本文已影响0人  fanren

前言

回调函数实现了异步编程,但是它的缺陷,让我们在复杂的流程上望而却步;Promise应运而生。

一、为什么要用Promise;

如果你有四个异步任务,task1,task2,task3,task4;
在上一个任务执行完毕后,才可执行下一个任务;

this.task1(() =>{
  // 执行task1任务
  this.task2(() => {
    // 执行task2任务
    this.task3(() => {
      // 执行task3任务
      this.task4(() => {
      // 执行task4任务
    });
    });
  });
});
promise.then(() => {
  this.task1();
}).then(() => {
  this.task2();
}).then(() => {
  this.task3();
}).then(() => {
  this.task4();
})

上面两种不同的书写方式,Promise的代码是不是更加整齐,更加方便阅读呢?

用Promise书写的异步代码,可以像同步代码那样方便阅读;

二、Promise介绍

Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。

它不是新的语法功能,而是一种新的写法。

三、Promise的使用

1.构造函数

let promise = new Promise((resolve, reject) => {
  // 可书写异步代码,如调接口等;
  let index = 5;
  if (index == 5) {
    resolve(5);
  } else {
    reject(1);
  }
})

2.then方法

promise.then((value) => {
  console.log(value, 'resolve')
}, (value) => {
  console.log(value, 'reject')
})

4.catch方法

promise.catch((error) => {
  console.log(error, 'error');
})

5.finally方法

promise.finally(() => {
  console.log('result');
})

then、catch、finally方法返回的都是一个新的Promise对象,所以Promise可以进行链式的调用;

promise.then((value) => {
  console.log(value, 'resolve')
}, (value) => {
  console.log(value, 'reject')
}).catch((error) => {
  console.log(error, 'error');
}).finally(() => {
  console.log('result');
})

四、Promise的三个状态

1.状态

2. resolve函数与reject函数的作用:

上一篇下一篇

猜你喜欢

热点阅读