Promise
1、怎么使用Promise
//记好:
return new Promise((resolve,reject)=>{.......})
任务成功调用 resolve(result)
任务失败调用 reject(error)
resolve 和 reject 会再去调用成功和失败的函数
2、Promise的用途
让你的代码规范,防止回调地狱,可以捕获错误
Promise是前端解决异步问题的统一方案
3、如何使用 Promise.prototype.then
MDN的解释:then()
方法返回一个 Promise
(en-US)。它最多需要有两个参数:Promise 的成功和失败情况的回调函数。
自己的理解: .then是一种链式操作,可以多次调用: 使用then方法之后会返回一个promise对象,可以继续用then方法调用,再次调用所获取的参数是上个then方法return的内容。
// 创建一个promise
let promise = new Promise((resolve, reject) => {
// 做一些事情(进行状态)
if (/*当满足某个条件*/) {
resolve(一些数据) // 调用resolve函数 (由进行转变到成功状态)
} else(/*即不满足条件*/){
reject(错误) // 调用rejected函数(由进行转变到失败状态)
}
})
// 使用这个promise
promise.then((一些数据) => {
// 这里写resolve函数的具体实现
}, (错误) => {
// 这里写reject函数的具体实现
})
4、如何使用 Promise.all
MDN给出的解释是:Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise
实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个Promise
的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。
我的解析就是: Promise.all() 其实是将多个Promise放在一个数组中,当整个数组的全部promise成功时才会返回成功,当数组中的promise有一个出现失败时就返回失败 (失败的原因是第一个失败promise的结果)。
Promise.all([promise1, promise2]).then(resolve, reject)
// 只有当promise1和promise2都成功时才会调用resolve
// 有一个promise失败都会调用reject
5、 如何使用 Promise.race
MDN解释: Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
我的解析: Promise.race(iterable),其实就是将多个Promise放在一个数组中,数组中有一个promise最先得到结果,不管是" 完成(resolve)"还是" 失败(reject)" , 那么
这个 .race 的方法就会返回这个结果。
Promise.race([promise1, promise2]).then(resolve, reject)
// promise1和promise2只要有一个成功就会调用resolve;
// promise1和promise2只要有一个失败就会调用reject;
// 总结: 谁第一个成功或失败,就认为是race的成功或失败。
网友评论