JavaScript中的Promise详解

 更新时间:2021年10月24日 17:12:20   作者:liuzhao0613  
这篇文章主要介绍了JavaScript中的Promise使用详解,promise对象是JS进阶学习中的重要知识点,需要的朋友可以参考下

Promise是异步编程的一种解决方案,是一个对象,可以获取异步操作的消息,大大改善了异步编程的困难,避免了回调地狱,比传统的解决方案回调函数和事件更合理和更强大。

从语法上讲,Promise是一个对象,它可以获取异步操作的消息。提供了一个统一的API,各种异步操作都可以用同样的方法进行处理

1、Promise的实例有三个状态:

(1)Pending(进行中)

(2)Resolved(已完成)

(3)Rejected (已拒绝)

2、Promise的实例有两个过程

(1)pending > fulfiled :Resolved

(2)pending > rejected :Rejected

注意:一旦从进销项状态变为其他状态就永远不能更改状态了

Promise的基本用法:

1、创建Promise对象

Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)

Promise构造函数接收一个函数作为参数,该函数的两个参数分别是 resolve 和 reject

2、Promise 方法

Promise有五个常用方法:

(1)then()

then 方法可以接收两个回调函数作为参数,第一个回调函数是Promise对象的状态改变为 resoved 是调用,第二个回调函数是 Promise 对象的状态变为 rejected 时调用。其中第二个参数可以省略。

let promise = new Promise((resolve,reject)=>{
    ajax('first').success(function(res){
        resolve(res);
    })
})
promise.then(res=>{
    return new Promise((resovle,reject)=>{
        ajax('second').success(function(res){
            resolve(res)
        })
    })
}).then(res=>{
    return new Promise((resovle,reject)=>{
        ajax('second').success(function(res){
            resolve(res)
        })
    })
}).then(res=>{
 })

(2)catch()

该方法相当于 then 方法的第二个参数,指向 reject 的回调函数。

另一个作用是,在执行resolve回调函数时,如果出错,抛出异常,不会停止陨星,而是进入catch 方法中。

p.then((data) => {
     console.log('resolved',data);
},(err) => {
     console.log('rejected',err);
     }
); 
p.then((data) => {
    console.log('resolved',data);
}).catch((err) => {
    console.log('rejected',err);
});

(3)all()

all 方法可以完成并进行任务,它接收的是一个数组,数组的每一项都是 Promise 对象。当数组中所有的 Promise 状态都达到 resolved 的时候,all 方法的状态就会变成 resolved,如果有一个状态变成了 rejected。那么all 方法的状态就会变成rejected。

javascript
let promise1 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(1);
	},2000)
});
let promise2 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(2);
	},1000)
});
let promise3 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(3);
	},3000)
});
Promise.all([promise1,promise2,promise3]).then(res=>{
    console.log(res);
    //结果为:[1,2,3] 
})

(4)rece()

rece 方法和 all 一样,接收的参数是一个每项都是 Promise 的数组,但是与 all 不同的是,当最先执行完的事件执行完之后,就直接返回该 promise 对象的值

rece的实际作用:当要做一件事,超过长时间就不做了,可以用这个方法来解决。

Promise.race([promise1,timeOutPromise(5000)]).then(res=>{})

(5)finally()

finally 方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。(该方法是ES2018中引入标准的)

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

finally 方法的回调函数不接受任何参数,这意味着没有办法知道前面的 Promise 状态到底是 fulfilled 还是 rejected

promise
.finally(() => {
  // 语句
});
// 等同于
promise
.then(
  result => {
    // 语句
    return result;
  },
  error => {
    // 语句
    throw error;
  }
);

在上面代码中,如果不写 finally 方法,同样的语句需要为成功和失败两种情况各写一次。有了 finally 方法只需写一次即可

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • HTML5 JS压缩图片并获取图片BASE64编码上传

    HTML5 JS压缩图片并获取图片BASE64编码上传

    这篇文章主要介绍了HTML5 JS压缩图片并获取图片BASE64编码上传方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 一些超实用的JS常用算法详解(推荐!)

    一些超实用的JS常用算法详解(推荐!)

    算法是计算机算法即计算机能够执行的算法,只有明确了算法后,才能使应用程序实现某些功能,所以通常人们会将算法称为程序的灵魂,下面这篇文章主要给大家分享介绍了一些超实用的JS常用算法的相关资料,需要的朋友可以参考下
    2022-10-10
  • webpack优化的深入理解

    webpack优化的深入理解

    这篇文章主要给大家介绍了关于webpack优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Javascript模板技术

    Javascript模板技术

    Javascript模板技术...
    2007-04-04
  • 4 种滚动吸顶实现方式的比较

    4 种滚动吸顶实现方式的比较

    这篇文章主要介绍了4种滚动吸顶实现方式的比较,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • js includes方法的使用小结

    js includes方法的使用小结

    JavaScript中的数组includes()方法用于判断数组中是否包含指定的元素,并返回一个布尔值,这篇文章主要介绍了js includes方法的使用,需要的朋友可以参考下
    2024-01-01
  • JavaScript页面加载事件实例讲解

    JavaScript页面加载事件实例讲解

    在本篇文章中我们给大家通过实例讲解一下关于JavaScript页面加载事件的相关知识点内容,有需要的朋友们可以参考下。
    2019-09-09
  • js滚轮事件兼容性问题需要注意哪些

    js滚轮事件兼容性问题需要注意哪些

    这篇文章主要为大家详细介绍了js滚轮事件需要注意的兼容性问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】

    JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】

    这篇文章主要介绍了JavaScript数据结构与算法之二叉树遍历算法,结合实例形式详细分析了javascript二叉树的定义及先序遍历、中序遍历、后序遍历等相关遍历操作实现技巧,需要的朋友可以参考下
    2019-02-02
  • javascript 寻找错误方法整理

    javascript 寻找错误方法整理

    为了以后能快速寻找到这方面的错误,节约更多的时间,下面将问题的解决方法整理了一下
    2014-06-06

最新评论