美文网首页
ES6-Promise

ES6-Promise

作者: 清风昙 | 来源:发表于2022-03-07 07:56 被阅读0次

    JavaScript执行异步调用的传统方式是事件和回调函数,随着应用的复杂化,事件和回调函数无法完全满足开发者要实现的要求,为此ES6给出了Promise这已强大的异步编程解决方案。

    • 基本用法
      Promise可以通过Promise构造函数创建,这个构造函数只接受一个参数,包含初始化Promise代码的执行器(executor)函数,在该函数内包含需要异步执行大代码。执行器函数接受两个参数,分别是resolve()和reject()函数,这两个函数由JavaScript引擎提供,不需要用户自己编写。异步操作结束成功时调用resolve()函数,失败时调用reject()函数。如:
    const promise = new Promise(function(resolve, reject) {
      // 开启异步操作
      setTimeout(() => {
        try{
           let c = 6 / 2
           resolve(c)
        }catch(err){
           reject(err)
        }
      }, 1000)
    })
    
    • 创建已处理的Promise
      要将一个现有的对象转换为Promise对象,可以调用Promise.resolve()方法,该方法接受一个参数并返回一个完成状态的Promise,之后再返回的Promise对象上调用then()方法来获取值。如:
    const promise = Promise.resolve('hello react.js')
    promise.then(rs => console.log(rs))  // hello react.js
    
    • 响应多个Promise
      需要等待多个异步任务完成后,再执行下一步的操作可以调用Promise.all()方法,该方法接受一个参数并返回一个新的Promise对象,参数是一个包含多个Promise的可迭代对象。
    const promise1 = new Promise((resolve, reject) => {
      resolve(''1)
    })
    const promise2 = new Promise((resolve, reject) => {
      resolve('2')
    })
    Promise.all([promise1, promise2]).then(rs => {
      console.log(rs)
    }).catch(err => {
      console.log(err)
    })
    

    ES6还提供Promise.race()方法,同样是传入多个Promise对象,和Promise.all()区别是,该方法只要有一个Promise成功或失败就返回。

    const promise1 = new Promise((resolve, reject) => {
      resolve(''1)
    })
    const promise2 = new Promise((resolve, reject) => {
      resolve('2')
    })
    Promise.race([promise1, promise2]).then(rs => {
      console.log(rs)
    }).catch(err => {
      console.log(err)
    })
    

    相关文章

      网友评论

          本文标题:ES6-Promise

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