Skip to content

一篇文章弄懂Promise是什么,怎么用

一:Promise是什么

在默认的情况下,异步是无序执行的。 
但是如果要让异步程序产生有序的结果,传统解决方案 是使用异步函数的回调,层层嵌套 (在上一个异步的回调函数中,开始执行下一个异步)

我们发现上面代码大量使用了回调函数(将一个函数作为参数传递给另个函数)并且有许多 })结尾的符号,使得代码看起来很混乱。

于是ES6中新增了Promise,翻译成中文就是承诺,意思是在未来某一个时间点承诺返回数据给你,它可以用来解决异步回调地狱导致的代码混乱。

二:怎么使用Promise

Promise是一个构造函数,所以我们在使用的时候就可以这样使用:

1.创建Promise实例对象

Promise有三种状态:pending/reslove/reject 。pending就是未决,resolve可以理解为成功,reject可以理解为拒绝

const myPromise = new Promise((resolve,reject)=>{
let a =1
//异步代码
setTimeout(()=>{
  // resolve用于返回异步执行成功的函数
    if(a===0){
    resolve('success')}
    else{
    // reject用来返回异步执行失败的函数
    reject('fail')}
    },1000)
})

2.调用实例对象的then方法

1myPromise.then(data=>console.log(data),err=>{console.log(err)})

resolve()函数调用的就是then的第一个函数,reject函数就是调用的then的第二个函数

三:Promise的核心原理

1 Promise对象有三种工作状态
* a.进行中 pending
* b.已完成 fulfilled
* c.已失败 rejected
2 Promise状态改变只有两种情况
* a.从pending(进行中)变为fulfilled(已成功)
* b.从pending(进行中)变为fulfilled(已失败)
3 Promise对象一旦创建,就会立即执行里面的异步处理

四:Promise注意点

1 千万不要在promise的里面去操作异步的结果 : 异步永远是无序的 

2 应该在promise的then方法中去操作promise的结果 : 通过then来控制异步结果,从而产生一个有序的结果

 Promise的本质不是修改异步本身的顺序(异步永远是无序的),是通过操作异步结果的顺序来控制异步的顺序.Promise控制异步结果顺序: 在上一个promise实例对象的then方法中,返回下一个promise实例对象

五:Promise其他方法

1 catch() : 用于统一处理错误信息。 catch上面所有的promise任何一个出错就会进入catch
2 all() : 将多个promise对象合并为一个promise, 只有所有的promise完成后才会执行then,then执行的结果也是个数组,依次存储每一个promise的结果
3 race(): 将多个promise对象合并为一个promise, 只要有任何一个promise完成就会执行then,且其他promise停止执行

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注