Promise对象

写在前面:最近刷面经,被问到很多关于ES6的问题,当提到promise时,本以为回答的还不错,可是之后被怼了,说我理解得有问题,郁闷之余回来恶补一下,才发现自己当时只回答一些皮毛,这些不是面试官想听到的,败军之将,羞愧难当,写下此文章。覆车之鉴,望后人警示。

引流阮一峰大佬的文章-->Promise 对象

面试回答:

promise就是用来解决 异步 处理的, 不管在vue 中 还是 其他的 地方, 都一样, 一般vue 中我们会用axios来解决接口的问题, 但是如果有多个 接口A,B,C需要按照顺序调的时候, 就需要在封装axios的时候用promise , 做到 等待 前一个 接口A 完成, 再 执行B , 形成一个链式调用。

手写代码:

function fun(){
   return new Promise((resolve,reject) => {
      axios.post(url,data)
          .then(response => {
            resolve(response.data);
          },err => {
            reject(err)
          })
    })
}
const promise=new Promise((resolve,reject)=>{
    axios.get(url,params)
})
promise.then(res=>{
    
})
promise.catch(err=>{
    
})

纯理论:Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。

一旦状态改变,就不会再变,任何时候都可以得到这个结果。

promise有两个参数,成功、失败(resolve,reject)

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易

Promise也有一些缺点。首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章