标签:结果 reject pre 方案 bsp end The ror 构造函数
Promise是ES6里新增的语法,一种异步编程的解决方案,比传统的解决方案回调函数和事件更加合理和强大,Promise有三种状态,分别是Pending(进行中),Fulfilled(已成功),Rejected(已失败),状态一旦发生变化就不能再发生改变,只能从一种状态变为另一种,例如:Pending -> Fulfilled,Pending -> Rejected。Promise构造函数接收一个函数,这个函数有两个固定的参数,分别是resolve和reject,这两个参数也是一个函数,我们通过调用resolve函数会使状态从Pending变为Fulfilled,将会执行then里面的第一个回调函数参数,调用reject函数的话会使状态从Pending变为Rejected,将会执行then里面的第二个回调函数参数,假如then里面只传了一个参数的话,我们也可以通过catch来进行回调。
new Promise((resolve, reject) => { setTimeout(() => { resolve("请求成功"); // 执行then里面的第一个回调函数 //reject("error message"); // 执行then里面的第二个回调函数或执行catch里面的回调函数 }, 1000); }).then(res => { console.log(res) }, err => { console.log(err) }).catch(err=>{ console.log(err) })
Promise.all可以将多个Promise实例包装成一个新的Promise实例,这些Promise以数组的形式作为Promise.all的参数,要每个Promise都成功才会执行Promise.all的then的第一个参数函数回调,将这些Promise成功返回的结果以数组形式返回,只要有一个失败都会进行reject操作,返回的结果为第一个失败的Promise的结果。
Promise.all([ new Promise((resolve, reject) => { setTimeout(() => { resolve({ name: ‘why‘, age: 18 }) }, 2000); }), new Promise((resolve, reject) => { setTimeout(() => { resolve({ name: ‘kobe‘, age: 19 }) }, 1000); }) ]).then(results => { console.log(results); }).catch(err=>{ console.log(err) })
Promise.race也是可以将多个Promise实例包装成一个新的Promise实例,同样的这些Promise以数组的形式作为Promise.race的参数,这些Promise实例哪个先发生状态改变就先返回哪个的结果,无论是进行了resolve操作还是reject操作,相当于是赛跑。
Promise.race([ new Promise((resolve, reject) => { setTimeout(() => { resolve(‘请求成功‘) }, 1000); }), new Promise((resolve, reject) => {//第二个promise返回结果更快 setTimeout(() => { resolve(‘请求失败‘) }, 500); }) ]).then(results => { console.log(results); }).catch(err => { console.log(err);//最终调用了catch })
Promise、Promise.all、Promise.race 分别怎么用?
标签:结果 reject pre 方案 bsp end The ror 构造函数
原文地址:https://www.cnblogs.com/HTHQ1234/p/14040091.html