首页 > 其他分享 >Promise

Promise

时间:2023-03-13 20:12:13浏览次数:22  
标签:resolve 函数 promise reject Promise 回调

一、概述

  Promise是异步编程的一种解决方案,可以替代传统的解决方案--回调函数和事件,解决函数回调地狱,让代码更好维护。ES6统一了用法,并原生提供了Promise对象。作为对象,Promise有以下两个特点:

  (1)对象的状态不受外界影响。

  (2)一旦状态改变了就不会再变,也就是说任何时候Promise都只有一种状态。

  等待 => 成功 失败(resolve, reject)状态驱动

二、Promise的状态

  Promise有三种状态,分别是 Pending (进行中)、Resolved (已完成)、Rejected (已失败)。Promise从Pending状态开始,如果成功就转到成功态,并执行resolve回调函数;如果失败就转到失败状态并执行reject回调函数。

三、基本用法

       通过Promise的构造函数创建Promise对象

function getPromise(){
  const promise = new Promise((resolve, reject) => {
    resolve('成功');
    reject('失败');
  })
}
getPromise().then(res => {
  console.log(res)  //'成功'
}).catch(err => {
  console.log(err)  //'失败'
})

  Promise构造函数接受一个函数作为参数,该函数的两个参数是 resolve ,reject,它们由JavaScript引擎提供。其中 resolve 函数的作用是当Promise对象转移到成功,调用resolve并将操作结果作为其参数传递出去;reject 函数的作用是当Promise对象的状态变为失败时,将操作报出的错误作为参数传递出去。

  promise的then方法带有一下三个参数:成功的回调,失败的回调,前进的回调。一般情况下只需要实现第一个,后面的是可选的。Promise中最为重要的状态,通过then的状态传递可以实现的回调函数链式操作的实现。

  promise执行then还是一个promise,并且Promise的执行是异步的。因为Promise执行then后还是Promise,所以就可以根据这一特性,不断的链式调用回调函数。

  promise 属于构造函数,是一个宏任务,会立即执行,只执行一次,.then方法可以多次调用。

promise.all

function fn(){
    return new Promise((resolve,reject)=>{
        let randomNum = parseInt(Math.random()*6+1);
        console.log(randomNum);
        if(randomNum>3){
            resolve('买'); 
        }
        else{
            reject('不买');
        }
    })
}
 
Promise.all([fn(),fn()]).then((x)=>{console.log(x,'success')},(y)=>{console.log(y,'error');});

Promise.all 里面参数为一个数组,数组的每一项是一个返回promise 的函数调用
then 的第一个参数是所有promise都成功的调用,返回结果是一个数组,数组的每一项为函数promise 的返回结果。
then 的第二个参数:返回结果有一个失败则执行失败的回调,拿到的是第一个失败的值

标签:resolve,函数,promise,reject,Promise,回调
From: https://www.cnblogs.com/lenhui/p/17212670.html

相关文章