本文共 4105 字,大约阅读时间需要 13 分钟。
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
通过new构造函数创建promise对象,构造函数的参数里面又有一个函数参数,这个函数函数里面又有两个参数(resolve,reject),一个代表成功的回调,一个是失败的回调。对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。
pending变为fulfilled -->resolve pending变为rejected -->rejectlet promise = new Promise((resolve, reject) => { resolve();//函数对象,解决,成功 --成功的回调 }); //实例方法的前面一定是promise对象。 //实例方法(Promise.prototype.then/Promise.prototype.catch)分开写。 promise.then(() => { //成功的回调,函数做参数 console.log('成功'); });
let promise = new Promise((resolve, reject) => { reject();//函数对象,未解决,失败 --失败的回调 }); //实例方法的前面一定是promise对象。 //实例方法(Promise.prototype.then/Promise.prototype.catch)分开写。 promise.catch(() => { //失败的回调,函数做参数 console.log('失败'); });
实例方法(Promise.prototype.then/Promise.prototype.catch)链式调用。
let promise = new Promise((resolve, reject) => { resolve();//函数对象,解决,成功 --成功的回调 reject();//函数对象,未解决,失败 --失败的回调 }); promise.then(() => { console.log('成功1'); }).catch(() => { console.log('失败1'); })
实例方法(Promise.prototype.then/Promise.prototype.catch)简写。
let promise = new Promise((resolve, reject) => { resolve();//函数对象,解决,成功 --成功的回调 reject();//函数对象,未解决,失败 --失败的回调 }); promise.then(() => { 成功的回调,函数做参数 console.log('成功2'); }, () => { //失败的回调,函数做参数 console.log('失败2'); });
let promise = new Promise((resolve, reject) => { resolve('我是成功的状态');//这里的参数传给then里面的函数 //reject('我是失败的状态');//这里的参数传给catch里面的函数 }); promise.then((d) => { console.log(d);//我是成功的状态 }).catch((err) => { //console.log(err);//我是失败的状态 });
let promise = new Promise((resolve, reject) => { resolve('我是成功的状态');//这里的参数传给then里面的函数 //reject('我是失败的状态');//这里的参数传给catch里面的函数 }); promise .then((d) => { console.log(d);//我是成功的状态 }) .then(() => { console.log(1); }) .then(() => { console.log(2); }) .catch((err) => { console.log(err);//我是失败的状态 });
Promise.all([ ]):
用于将多个 Promise实例,包装成一个新的 Promise 实例。 Promise.all()方法接受一个数组作为参数 只有数组的里面的每一个状态都是resolve,则新的promise实例的状态才会变成resolve.(才可以调用新的promise实例下面的then),其他的情况都是失败let p1 = new Promise((resolve, reject) => { setTimeout(() => { resolve('任务1'); }, 2000) }); let p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve('任务2'); }, 1000); }); let p3 = new Promise((resolve, reject) => { resolve('任务3'); }); let newpromise = Promise.all([p1, p2, p3]);//包装成一个新的 Promise 实例 newpromise.then((data) => { console.log(data);//["任务1", "任务2", "任务3"] 同时请求多个接口。 }).catch(() => { console.log('状态是失败的'); });
Promise.race([ ]):
Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。 race指的是任务快的先执行,其他延迟的任务后续执行。let p1 = new Promise((resolve, reject) => { setTimeout(() => { resolve('任务1'); }, 2000) }); let p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve('任务2'); }, 1000); }); let p3 = new Promise((resolve, reject) => { resolve('任务3'); }); let newpromise = Promise.race([p1, p2, p3]);//包装成一个新的 Promise 实例 newpromise.then((data) => { console.log(data);//任务三 }).catch(() => { console.log('状态是失败的'); });
转载地址:http://ygkgn.baihongyu.com/