Promise基础

Promise基本使用

Promise是JavaScript执行异步操作的执行方案

Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。

promise的一般执行步骤如下:

  1. promise构造函数接收两个回调函数,分别为resolve和reject,表示请求成功和请求失败

    注意:一定要在promise构造函数中执行上述两个回调函数,否则then方法将不会执行

  2. 在promise中定义异步执行任务,然后分别定义请求成功时与失败时所执行的方法

  3. 使用then执行请求成功时的任务,使用catch执行请求失败时的任务

例如:

const tNum = 2;
new Promise((resolve, reject) => {
    setTimeout(() => {
        console.log('hello world');
        if (tNum == 2) {
            resolve('hi you');
        } else {
            reject('error');
        }
    }, 1000);
}).then((message) => {
    console.log(message);
}).catch((message) => {
    console.log(message);
});

resolve和reject都可以传递参数,在then和catch中定义的函数默认参数就来自resolve和reject

promise补充

一个 Promise必然处于以下几种状态之一:

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

Promise基础

实质上, then和catch的返回值又是一个新的promise,因此可以链式使用

但在链式使用promise时,如果其中一个then回调的函数无法执行进入reject时,那么接下来的then不会再执行,这也说明了其链式的原则。如果有catch,则直接跳到最后的catch,否则停止执行

例如:

const tNum = 2;
new Promise((resolve, reject) => {
    setTimeout(() => {
        console.log('hello world');
        if (tNum == 2) {
            resolve('hi you');
        } else {
            reject('error');
        }
    }, 1000);
}).then(() => {
    console.log('message');
}).then(() => {
    console.log('message2');
    return new Promise((resolve, reject) => {
        reject('most error!');
    })
}).then(() => {
    console.log('message3');
}).catch((message) => {
    console.log(message);
})

实际上,将每个then和catch看作一个promise就会好理解许多

上一篇:用promise手写一个ajax


下一篇:promise使用方式