Promise是JavaScript执行异步操作的执行方案
Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。
promise的一般执行步骤如下:
promise构造函数接收两个回调函数,分别为resolve和reject,表示请求成功和请求失败
注意:一定要在promise构造函数中执行上述两个回调函数,否则then方法将不会执行
在promise中定义异步执行任务,然后分别定义请求成功时与失败时所执行的方法
使用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必然处于以下几种状态之一:
实质上, 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就会好理解许多