JavaScript中Promise的异步处理机制、链式调用、错误处理、状态变化等特性如何全面理解?

2026-04-05 17:169阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1137个文字,预计阅读时间需要5分钟。

JavaScript中Promise的异步处理机制、链式调用、错误处理、状态变化等特性如何全面理解?

目录 + Promise的基本用法:

1.创建Promise对象

2.Promise的方法和总结

Promise是一种用于处理异步操作的解决方案,它是一个对象,可以获取异步操作的结果。它解决了传统回调函数中回调地狱的问题,使得异步编程更加简洁、易于管理。

目录
  • Promise的基本用法:
    • 1、创建Promise对象
    • 2、Promise 方法
  • 总结

    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

    JavaScript中Promise的异步处理机制、链式调用、错误处理、状态变化等特性如何全面理解?

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

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

    总结

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

    本文共计1137个文字,预计阅读时间需要5分钟。

    JavaScript中Promise的异步处理机制、链式调用、错误处理、状态变化等特性如何全面理解?

    目录 + Promise的基本用法:

    1.创建Promise对象

    2.Promise的方法和总结

    Promise是一种用于处理异步操作的解决方案,它是一个对象,可以获取异步操作的结果。它解决了传统回调函数中回调地狱的问题,使得异步编程更加简洁、易于管理。

    目录
    • Promise的基本用法:
      • 1、创建Promise对象
      • 2、Promise 方法
    • 总结

      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

      JavaScript中Promise的异步处理机制、链式调用、错误处理、状态变化等特性如何全面理解?

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

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

      总结

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