资讯专栏INFORMATION COLUMN

Promise对象入门

hosition / 1052人阅读

摘要:不管对象最后结果如何,都会执行的操作,方法中的回调函数不接受任何参数方法用于将多个实例包装成一个新的实例只有的状态都变成,的状态才会变成,此时的返回值组成一个数组,传递给的回调函数。

简介

promise对象可以获取异步操作的消息,提供统一的API,各个异步操作都可以用同样的方法进行处理。
promise对象不受外界影响,其有三种状态:pending(进行中)、fulfilled(成功)、rejected(失败),只有异步操作的结果可以决定当前状态,一旦状态改变就不可以再变化,状态改变方向有两种:pending -> fulfilled、pending -> rejected
promise对象的意义就在于将异步操作以同步操作的流程表达,避免层层嵌套的回调函数

基本用法
let promise = new Promise(function (resolve, reject) {
  if () {
    resolve(value) // 异步操作成功
  } else {
    reject(error) // 失败抛错
  }
})

Promise构造函数接受一个函数作为参数,该函数有两个参数:resolve、reject,当执行resolve函数时Promise对象状态pending -> fulfilled,当执行reject时Promise对象状态pending -> rejected

promise.then(function (value) {
  
}, function (error) {
  
})

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数,第二个参数为可选参数,例子:

let promise = new Promise(function (resolve, reject) {
  console.log("promise")
  resolve("11")
})
promise.then(function (value) {
  console.log(value)
})
console.log("22")

执行结果"promise -> 22 -> 11",promise对象新建后立即执行,then方法的回调会在所有同步任务执行完成后执行

catch

promise.prototype.catch()是then()方法的别名,用于指定发生错误时的回调函数

new Promise(function () {

}).then(() => {

}).catch(err => {
  console.log(err)
})

如果异步操作抛出错误,状态就会变为reject,就会调用catch中的回调,当状态为resolve,执行then方法中的回调时,若报错同样回进入catch的回调
意义:当我们使用promise异步操作时,但是没有使用catch捕获错误时,若promise异步执行报错时,外部代码并不会接收到错误,而是继续执行不受影响

const someAsyncThing = function() {
  return new Promise(function(resolve, reject) {
    resolve(x);
  });
};
someAsyncThing().then(function() {
  console.log("ok");
});
setTimeout(() => { console.log("continue") }, 100);

如代码所示,x变量并没有定义,期待的操作是执行报错,然后停止运行,实际上‘continue’会执行输出,这说明当没有catch捕获错误时,外部代码不会知道Promise对象内部执行已经报错,因此会继续执行。

finally

不管Promise对象最后结果如何,都会执行的操作,finally方法中的回调函数不接受任何参数

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

Promise.all方法用于将多个Promise实例包装成一个新的实例

Promise.all([p1,p2,p3]).then((array) => {
  
}).catch((err) => {
  
})

只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93128.html

相关文章

  • Promise入门之基本用法

    摘要:入门之基本用法背景在我们使用异步函数比如进行编写代码,如果我们需要很多个请求不同的接口,而下一个接口需要依赖上一个接口的返回值,这样,我们的代码则需要在各种回调函数中嵌套,这样一层一层地下去,就形成了回调地狱。 Promise入门之基本用法 背景 在我们使用异步函数比如ajax进行编写代码,如果我们需要很多个ajax请求不同的接口,而下一个接口需要依赖上一个接口的返回值,这样,我们的代...

    siberiawolf 评论0 收藏0
  • 【前端】ES6入门基础知识

    摘要:关于的入门了解新增模板字符串为提供了简单的字符串插值功能箭头函数操作符左边为输入的参数,而右边则是进行的操作以及返回的值。将对象纳入规范,提供了原生的对象。增加了和命令,用来声明变量。 关于ES6的入门了解 新增模板字符串(为JavaScript提供了简单的字符串插值功能)、箭头函数(操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs。)、for-o...

    philadelphia 评论0 收藏0
  • ECMAScript 6入门Promise对象

    摘要:对象的状态不受外界影响。如果改变已经发生了,你再对对象添加回调函数,也会立即得到这个结果。会等中的对象全部执行完后将数组传入回调函数中与不同的是只要之中有一个实例率先改变状态,的状态就跟着改变。 Promise对象 刚学习完,有点粗略印象。整理记录一下以便后续学习补充,加深理解。 Promise是什么 Promise是构造函数,可以通过new来生成Promise对象。 Promise有...

    ingood 评论0 收藏0
  • ES6入门到进阶(二):循环、数组、对象

    摘要:优点按需加载可以写中路径也可以动态加以后默认就是严格模式,默认严格模式完参考视频资料经典入门到进阶 上一篇:ES6入门到进阶(一):let、解构赋值、字符串模板、函数 一、循环 ES5里面新增一些东西 1.1 arr.forEach()(常用) 1. for for(let i=0; i [{t:aaaa}] let arr = [ ...

    JerryZou 评论0 收藏0
  • Promise学习:基础入门

    摘要:今天来学习下吧其实这在笔试上也是一个考点基本介绍对象是熟悉的名字吧工作组提出的规范原本只是社区提出的构想一些外部函数库率先实现了该功能中将其写入了语言标准目的为异步操作提供统一接口是啥它就是一个中一个对象起着代理作用充当异步操作与回调函 今天来学习下Promise吧,其实这在笔试上也是一个考点. 基本介绍 Promise对象是CommonJS(熟悉的名字吧- -)工作组提出的规范.Pr...

    iamyoung001 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<