Promise小结

2021-12-14  本文已影响0人  Sharp丶TJ

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的成功或失败。
上一篇 下一篇

猜你喜欢

热点阅读