ES6知识点整理Promise的应用

ES6(ES2015)新特性整理 阅读详情

The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value.

Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示。简单点说,它就是用于处理异步操作的,异步处理成功了就执行成功的操作,异步处理失败了就捕获错误或者停止后续操作。

在promise之前处理异步回调的方式

function asyncFun(a,b,callback) {
      setTimeout(function () {
        callback(a+b);
      },200);
    }

    asyncFun(1,2, function (res) {
      if(res > 2) {
        asyncFun(res, 2, function (res) {
          if(res > 4) {
            asyncFun(res, 2, function (res) {
              console.log('ok');
              console.log(res);
            })
          }
        })
      }
    });

从上面可以看出所谓的”回调地狱”的可怕

使用promise来优雅的处理异步

function asyncFun(a,b) {
  return new Promise(function (resolve, reject) {
    setTimeout(function() {
      resolve(a + b);
    },200);
  })
}

asyncFun(1,2)
.then(function (res) {
  if(res > 2) {
    return asyncFun(res, 2);
  }
})
.then(function (res) {
  if(res > 4) {
    return asyncFun(res, 2);
  }
})
.then(function (res) {
  console.log('ok');
  console.log(res);
})
.catch(function (error) {
  console.log(error);
});

使用promise处理内部异常的举例

function asyncFun(a,b) {
  return new Promise(function (resolve, reject) {
    // 模拟异常判断
    if(typeof a !== 'number' || typeof b !== 'number') {
      reject(new Error('no number'));
    }
    setTimeout(function() {
      resolve(a + b);
    },200);
  })
}

asyncFun(1,2)
.then(function (res) {
  if(res > 2) {
    return asyncFun(res, 2);
  }
},function (err) {
  console.log('first err: ', err);
})
.then(function (res) {
  if(res > 4) {
    return asyncFun(res, 'a');
  }
},function (err) {
  console.log('second err: ', err);
})
.then(function (res) {
  console.log('ok');
  console.log(res);
},function (err) {
  console.log('third err: ', err);
});  

从上面可以看出通过then的第二个回调函数处理promise对象中的异常,通过reject返回异常的promise对象

通过catch统一处理错误,通过finally执行最终必须执行的逻辑

function asyncFun(a,b) {
  return new Promise(function (resolve, reject) {
    // 模拟异常判断
    if(typeof a !== 'number' || typeof b !== 'number') {
      reject(new Error('no number'));
    }
    setTimeout(function() {
      resolve(a + b);
    },200);
  })
}

asyncFun(1,2)
.then(function (res) {
  if(res > 2) {
    return asyncFun(res, 2);
  }
})
.then(function (res) {
  if(res > 4) {
    return asyncFun(res, 'a');
  }
})
.then(function (res) {
  console.log('ok');
  console.log(res);
})
.catch(function (error) {
  console.log('catch: ', error);
})
.finally(function () {
  console.log('finally: ', 1+2);
});

通过Promise.all()静态方法来处理多个异步

function asyncFun(a,b) {
  return new Promise(function (resolve, reject) {
    setTimeout(function() {
      resolve(a + b);
    },200);
  })
}

var promise = Promise.all([asyncFun(1,2), asyncFun(2,3), asyncFun(3,4)])
promise.then(function (res) {
  console.log(res);  // [3, 5, 7]
});

通过Promise.race()静态方法来获取多个异步中最快的一个

function asyncFun(a,b,time) {
  return new Promise(function (resolve, reject) {
    setTimeout(function() {
      resolve(a + b);
    },time);
  })
}

var promise = Promise.race([asyncFun(1,2,10), asyncFun(2,3,6), asyncFun(3,4,200)])
promise.then(function (res) {
  console.log(res);  // 5
});

通过Promise.resolve() 静态方法来直接返回成功的异步对象

var p = Promise.resolve('hello');
p.then(function (res) {
  console.log(res); // hello
});

等同于,如下:

var p = new Promise(function (resolve, reject) {
  resolve('hello2');
})
p.then(function (res) {
  console.log(res); // hello2
});

通过Promise.reject() 静态方法来直接返回失败的异步对象

var p = Promise.reject('err')
p.then(null, function (res) {
  console.log(res); // err
});

等同于,如下:

var p = new Promise(function (resolve, reject) {
  reject('err2');
})
p.then(null, function (res) {
  console.log(res); // err
});

通过一个小例子来测试Promise在面向对象中应用

'use strict';

class User{
  constructor(name, password) {
    this.name = name;
    this.password = password;
  }

  send() {
    let name = this.name;
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        if(name === 'leo') {
          resolve('send success');
        }else{
          reject('send error');
        }
      });
    });
  }

  validatePwd() {
    let pwd = this.password;
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        if(pwd === '123') {
          resolve('validatePwd success');
        }else{
          reject('validatePwd error');
        }
      });
    })
  }
}

let user1 = new User('Joh');
user1.send()
  .then(function (res) {
    console.log(res);
  })
  .catch(function (err) {
    console.log(err);
  });

let user2 = new User('leo');
user2.send()
  .then(function (res) {
    console.log(res);
  })
  .catch(function (err) {
    console.log(err);
  });

let user3 = new User('leo', '123');
user3.validatePwd()
  .then(function (res) {
    return user3.validatePwd();
  })
  .then(function (res) {
    console.log(res);
  })
  .catch(function(error) {
    console.log(error);
  });

let user4 = new User('leo', '1234');
user4.validatePwd()
  .then(function (res) {
    return user4.validatePwd();
  })
  .then(function (res) {
    console.log(res);
  })
  .catch(function(error) {
    console.log(error);
  });
ES6中Promise、async和await面试题整理 promise是每个前端人必须会接触到的一个知识点,下面这篇文章主要给大家整理了一下关于ES6中Promise、async和await面试题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下 阅读详情

相关推荐

星宸科技SSD20x/SSD21X应用层DEMO实战指南:从入门到深度定制

本文详细介绍了星宸科技SSD20x/SSD21X系列芯片的应用层DEMO开发实战,从基础环境搭建到深度定制开发。内容涵盖DEMO资源获取、核心功能实现、第三方库集成以及性能优化技巧,帮助开发者快速掌握智能显示和多媒体处理应用的开发方法。特别适合嵌入式开发者在智能家居、工业控制等场景中应用。

weixin_42524226的博客 270

ES6的Promise详解

Promise.resolve、Promise.reject和Promise.all是Promise提供的一些常用方法,可以帮助我们更方便地处理异步操作。Promise是一种代表异步操作最终完成或失败的对象。在上面的示例中,我们使用Promise.resolve方法将一个Promise对象包装成一个新的Promise对象。在then方法中,我们可以获取到原始Promise对象的解决值,并进行相应的处理。在上面的示例中,我们使用Promise.reject方法创建一个被拒绝的Promise对象。

一步一个脚印,踏实努力,向着目标前进 1410

在Docker中集成GPU监控体系

先上效果图 等文档整理出来再更

tamako0v0的博客 2472

ES6新特性Promise详解

在ES6当中添加了很多新的API其中很值得一提的当然少不了Promise,因为Promise的出现,很轻松的就给开发人员解决了异步回调地狱的问题,废话不多,直接上代码: 在以前我们有个一个异步函数,而且还会有返回值给别的功能函数使用,函数如下: //异步函数延时两秒执行 function testA() { setTimeout(function () { return 2

Ran_Cheng_wei的博客 1271

项目实训(四)——SAM模型的学习与部署

这里的show_mask就是我们用mask的prompt进行分割,show_points就是我们用points进行分割,show_box就是通过box进行分割,这是SAM的三种prompt的方式。总的来说,Meta AI 的 Segment Anything 模型为我们提供了一种全新的物体识别和分割方式,其强大的泛化能力和广泛的应用前景将极大地推动计算机视觉领域的发展。这里有vit_h、vit_b、vit_l三种权重模型,这里可以根据自己的需要下载相应的权重模型。我们是下载的vit_h权重模型。

yyyyyyyx_的博客 1421

Aurix TC3XX Cache memory分析

Aurix Cache memory 分析

qwe0405080615的博客 4355

ES6---promise详解及用法

一、什么是Promise Promise是ES6异步编程的一种解决方案(目前最先进的解决方案是async和await的搭配(ES8),但是它们是基于promise的),从语法上讲,Promise是一个对象或者说是构造函数,用来封装异步操作并可以获取其成功或失败的结果。 二、为什么要使用promise 最重要也是最主要的一个场景就是ajax和axios请求。通俗来说,由于网速的不同,可能你得到返回值的时间也是不同的,但是我们下一步要执行的代码依赖于上一次请求返回值,这个时候我们就需要等待,结果出来了.

前端与计算机相关知识的分享,博主的qq523235674 2万+

YOLOv11缝合添加注意力机制:添加YOLO-Face的SEAM到并行通道空间注意力机制【附代码】

在目标检测的实际应用中,物体遮挡是一个严重影响检测精度的难点。本文将基于YOLOv11架构,探索融合YOLO-Face中提出的SEAM注意力机制以提升对遮挡物体的感知能力,并在此基础上提出一种轻量化双路径并行注意力机制C2PSA,进一步提升检测性能。

一键难忘的博客 1533

ES6 promise详解

ES6 Promise 1.什么是promise? ES6 中一个非常重要和好用的特性就是Promise promise 到底是做什么的呢? promise 是异步编程的一种解决方案。 那什么时候我们回来处理异步事件呢? 1.一种很常见的场景就是网络请求 2.我们分装一个网络请求的函数,因为不能立即拿到结果,所以不能像简单的3+4 = 7一样将结果返回。 3.所以我们往往会传入另外一个...

qq_43955202的博客 1379

【AI智能体】Docker 部署 Coze应用服务实战操作详解

Docker 部署 Coze应用服务实战操作详解

congge 4877

主成分分析(PCA)简洁高效MATLAB实现详解

本文介绍了一个简洁高效的PCA算法实现。该实现通过SVD分解计算主成分,避免了显式协方差矩阵计算,支持两种降维方式:固定维度或按能量比例自动选择。核心步骤包括数据中心化、SVD分解和维度选择,代码量少但功能完整,适用于数据预处理、降维和特征提取等任务。实现中考虑了稀疏矩阵转换、默认参数处理等细节,可直接应用于MATLAB环境。

m0_62153576的博客 64

ES6 Promise

ES6 Promise The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value. 直译过来就是:Promise对象表示异步操作的最终完成(或失败)及其结果值 作为一个新对象,他的存在肯定是有其意义的,比如优化了写法...

Cabu_husky的博客 298

华为OD机试 - TLV格式(Python/JS/C/C++ 2025 C卷 100分)

两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。和需要匹配的n个tag对应的n行匹配结果,每一行由长度和偏移量组成。第二行:需要匹配的tag数量n(0 < n < 1000)后面N行:需要匹配n个tag值(十进制表示),递增排列。标签10(0A)存在,长度3,valueOffset=2。标签15(0F)长度4,valueOffset=2。标签14(0E)长度2,valueOffset=8。

学Java,找哪吒 2042

前端面试题整理(八)ES6

准备面试的时候做的个人整理,比较基础,难度对标实习一面,校招应该比这难点。 你对ES6了解多少?知道哪些?(必问hhh) Promise(考过) Async/Await ES6中迭代器的使用:Generator函数 es6的继承和es5的继承有什么区别 箭头函数,以及它的this(考过) let暂时性死区(考过) ES6中map遍历的实现原理 Symbol,写一个应用实例,并说出它的其他应用场景 ...

yellowpig1210的专栏 212

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

一些javascript题目

var result = [10] + 1; console.log(result) "101" 存在运算符"+",意味着将[10]转化为一个值,相当于调用其valueOf()方法,而Array的valueOf相当于其toString var result = ['a', 'b', 'c'] + ""; console.log(result) "a,b,c" 与一个空字符相加,我们大可以就当成强行调用其toString方法,而Array的toString方法相当于调用其join

292

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

前端笔记之js

aa67567456的博客 152

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ES6 知识点整理

ES6核心知识点摘要 变量声明:let/const具有块级作用域和暂时性死区,const声明常量时引用类型属性可修改。 箭头函数:继承外层this,不可作构造函数,无arguments对象。 模板字符串:反引号支持多行文本和变量嵌入(${x})。 解构赋值:从数组/对象快速提取值,简化数据操作。 异步处理:Promise管理异步状态,async/await以同步写法处理异步。 数据结构:Set自动去重,Map支持任意类型键。 Class与模块化:类语法糖实现继承,import/export拆分代码模块。 高

黄同学的博客 1482

es6的Promise对象详解

秋招已经进入了尾声,这两个月以来一直忙着找工作,没有时间看新东西,这几天得空将es6的Promise对象又细细的理解了一下,所以下来整理一下我对Promise对象以及用法的理解。什么是Promise?为什么要使用Promise? 当我们使用js的异步调用时通常习惯使用回调函数,这样的代码简单便于理解,但是当回调嵌套的时候就会造成代码混乱,不好梳理,比如:function fun1(arg1,fun

csdn_zsdf的博客 7141

JS ES6 Promise 之 Hello World

■前言最近学习VUE,涉及到了一些内容,都不了解,比如 Axios, Promise,所以,整理记录一下仅仅是一个【 简单 】的介绍,更多的内容,可以看看提供的文章链接,或是其他的资料。0.AxiosAxios,可以理解为ajax i/o system,这不是一种新技术,本质上还是对原生XMLHttpRequest的封装,可用于浏览器和nodejs的HTTP客户端,只不过它是基于Promise的,符合最新的ES规范。

sun0322 5219

学习Vue2需要知道的Es6知识点

先掌握核心知识点(1-7项),完成 1-2 个 Vue 项目后,再逐步学习进阶特性。Vue2 项目中 90% 的 ES6 使用场景集中在模块系统、箭头函数、解构赋值和 Promise 这几项核心功能上。

weixin_48053866的博客 940

关于微信小程序中es6-promise的应用

关于JavaScript中es6-promise的应用应用promise背景es6与Promise的关系了解主流浏览器对promise的兼容下面记录一些自己对promise的理解 应用promise背景 由于我们公司需要开发微信小程序,并且小程序API大部分都是异步的API,不采用promise的话,将会出现代码一个嵌套一个的情况。如下所示: A(){ B(){ C(){ } } } ...

lvlynn的博客 4586

ES6 之 Promise用法详解

Promise 详解 源码解析

weixin_42707287的博客 5040

es5如何实现promise_ES5&ES6重点知识点总结

这是本人从开始学习JS一直到ES6记录的笔记中整理提炼出来的自己觉得比较重要的知识点。希望对大家有点帮助如果觉得整理的还可以就点个吧!嘿嘿1.数据类型的分类和判断基本数据类型Number typeof() ==numberString typeof() ==stringBoolean typeof() == booleanundefind typeof() == undefindnull t...

weixin_29305337的博客 801

es6知识点整理

es6知识点整理 文章目录es6知识点整理let和const变量的解构赋值模板字符串函数的扩展对象的语法糖set和mapsymbolPromiseasync/awaitclass let和const let 声明变量 不存在变量提升 不能在变量声明语句之前去使用变量 在变量声明前使用变量会报错 暂时性死区 存在暂时性死区,即在变量声明语句之前的区域和声明语句外的块级作用域下是不能使用该变量的 不允许重复声明 在声明变量之后,不能重复声明该变量,只能进行赋值操作 块级作用域 ES6中,

XDE_cat_的博客 807

整理学习——ES6 Promise对象

文章目录简要说明new Promise(executor) 简要说明 Promise对象用于表示一个异步操作的最终完成/失败,及其结果值。 new Promise(executor) executor = function(resolve, reject){…} executor是一个参数为resolve和reject的函数。 ...

shaliwang的博客 273
上一篇: git的跟踪分支和远程跟踪分支学习笔记
下一篇: ES6知识点整理Symbol的应用
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值