我们如果想要调用函数,在这个函数发送网络请求。
如果没有Promise,也确实可以自己实现,获取到对应的回调。但是,
如果能定义一个标准,给予调用者承诺,可以回调数据。开发者就能使用统一的标准写出相似的代码,减少了学习成本。所以ES6的Promise就是用来解决异步代码的困境的。
Promise是一个类,可以翻译成承诺、许诺、期约;
当我们需要的时候,可以给予调用者一个承诺:过一段时间后给调用者回调数据。这种情况就可以创建一个Promise的对象;
在通过new创建Promise对象时,我们需要传入一个回调函数,我们称之为executor
- 这个回调函数会被立即执行,并且传入另外两个回调函数resolve、reject;
- 当我们调用resolve回调函数时,会执行Promise对象的then方法传入的回调函数;
- 当我们调用reject回调函数时,会执行Promise对象的catch方法传入的回调函数;
const promise = new Promise((resolve, reject)=>{ //调用resolve,那么then传入的回调会被执行 resolve("成功信息") //调用reject,那么catch传入的回调会被执行 reject("错误信息") }) promise.then(res => { console.log(res) }).catch(err => { console.log(err) })
在Promise的使用过程中,我们可以将它划分成三个状态:
- 当执行executor中的代码时处于待定(pending):初始状态,既没有被兑现,也没有被拒绝;
- 执行了resolve时,处于已兑现(fulfilled)状态,Promise已经被兑现:意味着操作成功完成;
- 执行了reject时,处于已拒绝(rejected)状态,Promise已经被拒绝:意味着操作失败。