码迷,mamicode.com
首页 > 其他好文 > 详细

Promise、Promise.all、Promise.race 分别怎么用?

时间:2020-12-01 11:53:59      阅读:1      评论:0      收藏:0      [点我收藏+]

标签:结果   reject   pre   方案   bsp   end   The   ror   构造函数   

Promise是ES6里新增的语法,一种异步编程的解决方案,比传统的解决方案回调函数和事件更加合理和强大,Promise有三种状态,分别是Pending(进行中),Fulfilled(已成功),Rejected(已失败),状态一旦发生变化就不能再发生改变,只能从一种状态变为另一种,例如:Pending -> Fulfilled,Pending -> Rejected。Promise构造函数接收一个函数,这个函数有两个固定的参数,分别是resolve和reject,这两个参数也是一个函数,我们通过调用resolve函数会使状态从Pending变为Fulfilled,将会执行then里面的第一个回调函数参数,调用reject函数的话会使状态从Pending变为Rejected,将会执行then里面的第二个回调函数参数,假如then里面只传了一个参数的话,我们也可以通过catch来进行回调。

new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("请求成功"); // 执行then里面的第一个回调函数
        //reject("error message"); // 执行then里面的第二个回调函数或执行catch里面的回调函数
      }, 1000);
    }).then(res => {
      console.log(res)
    }, err => {
      console.log(err)
    }).catch(err=>{
      console.log(err)
    })

Promise.all可以将多个Promise实例包装成一个新的Promise实例,这些Promise以数组的形式作为Promise.all的参数,要每个Promise都成功才会执行Promise.all的then的第一个参数函数回调,将这些Promise成功返回的结果以数组形式返回,只要有一个失败都会进行reject操作,返回的结果为第一个失败的Promise的结果。

Promise.all([
      new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve({
            name: ‘why‘,
            age: 18
          })
        }, 2000);
      }),
      new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve({
            name: ‘kobe‘,
            age: 19
          })
        }, 1000);
      })
    ]).then(results => {
      console.log(results);
    }).catch(err=>{
      console.log(err)
    })

Promise.race也是可以将多个Promise实例包装成一个新的Promise实例,同样的这些Promise以数组的形式作为Promise.race的参数,这些Promise实例哪个先发生状态改变就先返回哪个的结果,无论是进行了resolve操作还是reject操作,相当于是赛跑。

Promise.race([
      new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(‘请求成功‘)
        }, 1000);
      }),
      new Promise((resolve, reject) => {//第二个promise返回结果更快
        setTimeout(() => {
          resolve(‘请求失败‘)
        }, 500);
      })
    ]).then(results => {
      console.log(results);
    }).catch(err => {
      console.log(err);//最终调用了catch
    })

 

Promise、Promise.all、Promise.race 分别怎么用?

标签:结果   reject   pre   方案   bsp   end   The   ror   构造函数   

原文地址:https://www.cnblogs.com/HTHQ1234/p/14040091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!