promise总结

1,promise的语法

新建一个promise对象, 参数是回调函数, 回调函数有两个参数

var promise = new Promise(resolve.reject){

 在resolve 和 reject 也是两个函数,
    在promise对象中开始一个异步操作

  fs.readFile(path,function(err,data){

  if(err) reject('失败了',err.message)        // 如果错误,执行reject函数,实参是 ‘失败了’,失败信息

  else   resolve('成功了',data)       // 如果成功,执行resolve函数,实参是 ‘成功了’,成功的数据

})

}

promise.then(function(data){

console.log(data)

},function(err){

console.log(err)

})    

注意:
// 1, 成功的回调函数resolve是必选的,必须在then中传入, 失败的回调函数reject是可选的, 可以省略
// 2, then函数获取promise异步结果不管在任何时间,任何位置调用, 不管调用多少次, 总能拿到异步结果

注意: promise中的异步任务是在new创建是直接开始执行的, then函数只是读取异步结果, 而不是开始执行异步请求

2,promise的用法:

 (1)使用promise解决多异步任务并发执行问题

  Promise 中提供了两个类方法:  all   race
       把多个promise对象合并成一个, 参数是数组,数组中放多个promise实例, 返回一个新的promise对象

  var mergeP = Promise.all([p1,p2,p3,p4])
   all类方法   使用合并后的对象调用then获取所有promise的结果, 结果是一个数组,结果数组中数据顺序和all参数顺序保持一致 (注意不是按照执行结束的先后顺    序排列)
  mergeP.then(function(dataArr){
      console.log(4, dataArr.join(""))
   })

  // all: 当合并的所有promise全部完成之后, 才会执行then回调,拿到所有结果
  // race: 任意一个合并的promise任务完成, 立即调用then回调, 只能拿到这一个结果:饱和式救援

  类方法: 使用 类名如:Object 直接调用的方法   如: Promise.all()   Promise.race()
  // 实例方法: 创建出来的对象obj调用的方法   如 :  p1.then(),  p1.catch()

  总结: promise的两个主要用法 

  1, 解决多异步任务多层嵌套问题
 2, 解决多异步任务并发问题

 

3.promise的原理:

// 每一个promise对象内部,都会有一个状态信息, 有三个可能值
    // pending 状态 表示等待状态, promise对象的默认状态,
    // resolve 状态 表示成功状态, 当调用了resolve函数时,状态变成成功状态
    // reject 状态 表示失败状态, 当调用了reject函数时,状态变成失败状态
    // 注意: 状态值只能变化一次,一旦变更为成功或失败状态,则会一致保持这个状态
 
// MyPromise在创建对象时,其回调函数会直接执行, 所以在构造函数中直接调用, 并传入成功和失败状态对应的函数

 

posted @   俺是前端小菜  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示