美文网首页海纳百川
Promise知识点回顾

Promise知识点回顾

作者: 凛冬已至_123 | 来源:发表于2018-06-25 09:38 被阅读0次

What is Promise

Promise 是一个对象,对象里存储一个状态,这个状态是可以随着内部的执行转化的,为以下三种状态之一:等待态(Pending)、完成态(Fulfilled)、拒绝态(Rejected)。

一开始,我们先设置好等状态从 pending 变成 fulfilled 和 rejected 的预案(当成功后我们做什么,失败时我们做什么)。

Promise 启动之后,当满足成功的条件时我们让状态从 pending 变成 fullfilled (执行 resolve);当满足失败的条件,我们让状态从 pending 变成 rejected(执行 reject)

常见的使用方法

Promise.prototype.then/Promise.prototype.catch

function getIp() {
  var promise = new Promise(function(resolve, reject){
    var xhr = new XMLHttpRequest()
    xhr.open('GET', 'https://easy-mock.com/mock/5ac2f80c3d211137b3f2843a/promise/getIp', true)
    xhr.onload = function(){
      var retJson = JSON.parse(xhr.responseText)  // {"ip":"58.100.211.137"}
      resolve(retJson.ip)
    }
    xhr.onerror = function(){
      reject('获取IP失败')
    }
    xhr.send()
  })
  return promise
}

function getCityFromIp(ip) {
  var promise = new Promise(function(resolve, reject){
    var xhr = new XMLHttpRequest()
    xhr.open('GET', 'https://easy-mock.com/mock/5ac2f80c3d211137b3f2843a/promise/getCityFromIp?ip='+ip, true)
    xhr.onload = function(){
      var retJson = JSON.parse(xhr.responseText)  // {"city": "hangzhou","ip": "23.45.12.34"}
      resolve(retJson.city)
    }
    xhr.onerror = function(){
      reject('获取city失败')
    }
    xhr.send()
  })
  return promise
}
function getWeatherFromCity(city) {
  var promise = new Promise(function(resolve, reject){
    var xhr = new XMLHttpRequest()
    xhr.open('GET', 'https://easy-mock.com/mock/5ac2f80c3d211137b3f2843a/promise/getWeatherFromCity?city='+city, true)
    xhr.onload = function(){
      var retJson = JSON.parse(xhr.responseText)   //{"weather": "晴天","city": "beijing"}
      resolve(retJson)
    }
    xhr.onerror = function(){
      reject('获取天气失败')
    }
    xhr.send()
  })
  return promise
}

getIp().then(function(ip){
  return getCityFromIp(ip)
}).then(function(city){
  return getWeatherFromCity(city)
}).then(function(data){
  console.log(data)
}).catch(function(e){
  console.log('出现了错误', e)
})

提示使用方法

// 第一种
var fn=new Promise((resolve,reject)=>{})
fn().then(()=>{},()=>{}).catch(()=>{})
//第二种
return new Promise(()=>{})

理解关键点

  • then和catch是promise.prototype上的方法
  • all和race是promise函数本身的方法
//Promise.all, 当所有的 Promise 对象都完成后再执行
Promise.all([p1, p2, p3]).then(data=>{
  console.log(data)
})
//Promise.race, Promise 对象最先执行完成的返回数据
Promise.race([p1, p2, p3]).then(data=>{
  console.log(data)
})

应用

  • 主要用于异步调用
  • 对于回调地狱其实并没有解决,只是换了一种更直观的写法,更符合逻辑思维,一目了然

相关文章

  • Promise知识点回顾

    What is Promise Promise 是一个对象,对象里存储一个状态,这个状态是可以随着内部的执行转化的...

  • 模拟实现 Promise.race

    回顾 Promise.race 的定义 Promise.race(iterable) 方法返回一个 promise...

  • 模拟实现 Promise.all

    回顾Promise.all 的定义 Promise.all() 方法接收一个 promise 的 iterable...

  • 『ES6知识点总结』Promise

    『ES6知识点总结』Promise 文本主要内容如下: * Promise是什么? * 1.1 特点: * 1.2...

  • 2021-12-27

    1.Promise核心知识点1)一个 Promise 必然处于以下几种状态之一 ?:待定 (pending): 初...

  • 微信小程序请求改造

    原生小程序请求 promise 封装wx.request 回顾promise使用 开始封装 首先在utils下创建...

  • 大厂面试Promise必备(上)

    大厂经常会围绕Promise 来展开面试,我们就从面试角度反推,学好重要的知识点吧~ 一、Promise 存在的原...

  • 初识Promise

    这是一篇很初级的有关Promise的知识整理,还有很多的知识点正在进行中... 什么是Promise Promis...

  • promise知识点

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和...

  • promise 练习题(三)

    Promise中的then、catch、finally 需要理解的知识点: 1 .then和.catch都会返回一...

网友评论

    本文标题:Promise知识点回顾

    本文链接:https://www.haomeiwen.com/subject/scpeyftx.html