返回顶部
首页 > 资讯 > 前端开发 > VUE >如何进行Promise对象的基础入门
  • 103
分享到

如何进行Promise对象的基础入门

2024-04-02 19:04:59 103人浏览 安东尼
摘要

如何进行Promise对象的基础入门,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天来学习下Promise吧!其实这在笔试上

如何进行Promise对象的基础入门,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

今天来学习下Promise吧!其实这在笔试上也是一个考点。

基本介绍

Promise对象是Commonjs(熟悉的名字吧-  -)工作组提出的规范.Promise原本只是社区提出的构想,一些外部函数库率先实现了该功能,es6中将其写入了语言标准.

目的:为异步操作提供统一接口

Promise是啥,它就是一个javascript中一个对象,起着代理作用,充当异步操作与回调函数之间的中介。

避免类似于

如何进行Promise对象的基础入门

这种嵌套地狱的产生.让我们的代码变得更加简单易读使用了Promise,大家都说好

(new Promise(f1).then(f2));

总结:Promise使得异步操作的向下发展变成横向发展,程序流程变得清晰,易于阅读。

基本思想

  • 异步任务返回一个Promise对象,它有三种状态

1.pending(未完成)

2.resolved,fulfilled(已完成)

3.rejected(失败)

  • 它有两种变化途径

1.pending --> resolved/fulfilled

2.pending --> rejected

  • 它有两种结果

1.异步操作成功,返回一个值,状态变为resolved

2.异步操作失败,抛出一个错误,状态变为rejected

Promise使用.then()方法添加回调函数,then接收两个回调函数,***个为成功时的回调函数,另一个为失败时的回调函数.主要为状态改变时调用相对的回调函数.

而且then可以链式调用。

基本使用

Promise构造函数接受一个函数作为参数,而该函数两个参数分别是resolve和reject.它们由JS引擎提供,不需要自己部署.

Promise(function(resolve,reject){})

resolve函数作用为:将Promise对象从未完成变为成功(Pending->Resolved),异步操作成功时调用,并将异步操作的结果作为参数传递出去.

reject函数作用为:将Promise对象从未完成变为失败(Pending->Rejected),异步操作失败时调用,并将异步操作报出的错误作为参数传递出去.

Promise.then()方法可以用于指定Resolved状态和Reject状态的回调函数.

promise.then(function(value){//成功+_+!},function(value){//失败Q_Q});

我们只想对异常进行处理时可以采用promise.then(undefined,  onRejected)这种方式,或者promise.catch(onRejected)

!注意!此处有坑,接下来在深入节会进行讲解

Promise.all()方法接收一个promise对象的数组为参数,当这个数组中所有的Promise对象全部变成resolve/reject状态的时候,才会调用.then方法,其中传入的promise是同时开始,并行执行的。

promise.all([promise1,promise2,.....]);

Promise.race()方法和Promise.all()方法一样接收一个promise对象的数组作为参数,但是数组中有一个promise对象进入fulfilled或rejected状态,就会开始后续处理.

promise.race([promise1,promise2,.....]);

相关的语法糖

Promise.resolve(42); //等价于 new Promise(function(resolve){     resolve(42); });  Promise.reject(new Error("出错了")); //等价于 new Promise(function(resolve,reject){     reject(new Error("出错了")); });

深入

关于Thenable对象

这是非常类似于Promise的东西,拥有.then方法.

其中比较经典的例子就是Jquery.ajax()返回的值就是thenable的.

var promise = Promise.resolve($.ajax('/JSON/comment.json'));

这样就可以将thenable对象转化为promise对象

传送门:Promise.resolve()

关于promise设计:总是异步操作

看代码就能明白这个地方的问题了.

var promise = new Promise(function (resolve){     console.log("inner promise"); // 1     resolve(42); }); promise.then(function(value){     console.log(value); // 3 }); console.log("outer promise"); // 2 //结果是 

可以看出,即使我们调用promise.then时promise对象已经确定状态,Promise也会以异步的方式调用回调函数,这就是Promise设计上的规定方针.

关于调用then/catch

每次调用then/catch,都会返回一个promise对象,这一点上我们通过使用===就可以判断出来每次promise对象其实都是不一样的

then和catch的错误处理区别

这点和上一点联合起来很容易理解

直接上图吧,来自于JavaScript Promise迷你书(中文版)

如何进行Promise对象的基础入门

在结合我们的代码吧

// <1> onRejected不会被调用 function badMain(onRejected) {     return Promise.resolve(42).then(throwError, onRejected); } // <2> 有异常发生时onRejected会被调用 function GoodMain(onRejected) {     return Promise.resolve(42).then(throwError).catch(onRejected); }

onFullfilled中发生的错误,如在<1>里面throwError中的错误,是不会导致onRejected的执行(捕获异常)的,我们只能通过后面的catch方法才能捕获.

基本应用

不兼容方面

  1. 不兼容就是用polyfill吧

  2. 关于IE8以及以下版本中,catch会由于在ES3中为保留字,导致identifier not  found错误,对此我们可以通过["catch"]或者then(undefined,function(){})来进行catch,而某些类库中,采用了caught作为函数名来规避该问题.值得注意的是,有很多压缩工具中自带了.catch转["catch"]

应用示例:

加载图片

var preloadImage = function(path){   return new Promise(function(resolve,reject){     var image = new Image();     image.onload = resolve;     image.onerror = reject;     image.src = path;   }) } preloadImage("https://dn-anything-about-doc.qbox.me/teacher/QianDuan.png").then(function(){   alert("图片加载成功"); },function(){   alert("图片加载失败"); })

Ajax操作

function search(term) {     var url = 'Http://example.com/search?q=' + term;     var xhr = new XMLHttpRequest();     var result;     var p = new Promise(function(resolve, reject) {         xhr.open('GET', url, true);         xhr.onload = function(e) {             if (this.status === 200) {                 result = JSON.parse(this.responseText);                 resolve(result);             }         };         xhr.onerror = function(e) {             reject(e);         };         xhr.send();     });     return p; } search("Hello World").then(console.log, console.error);

回到最初吧,其实Promise对象优点还是在于规范的链式调用,可以清晰看出程序流程.并且对于错误还能定义统一的处理方法。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网VUE频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何进行Promise对象的基础入门

本文链接: https://lsjlt.com/news/86165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何进行Promise对象的基础入门
    如何进行Promise对象的基础入门,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天来学习下Promise吧!其实这在笔试上...
    99+
    2024-04-02
  • Python类和对象基础入门介绍
    目录视频Python 类和对象创建和使用类根据类创建实例视频 观看视频 Python 类和对象 面向对象编程是编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。 编写类时,...
    99+
    2024-04-02
  • Vue.js实战入门:如何对数组和对象进行循环
    (学习视频分享:web前端开发、编程基础视频)以上就是Vue.js实战入门:如何对数组和对象进行循环的详细内容,更多请关注编程网其它相关文章!...
    99+
    2022-11-22
    Vue
  • Python零基础入门(九)——函数,类和对象
    系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟...
    99+
    2023-08-31
    python pycharm 人工智能 开发语言
  • JavaScript 原型链入门:了解对象继承的基础
    原型链概述 原型链是 JavaScript 中的一种机制,它允许对象访问和继承父对象的方法和属性。当一个对象被创建时,它会自动获得一个原型对象,该原型对象包含着该对象的所有属性和方法。当对象试图访问一个不存在的属性或方法时,它会自动搜索其...
    99+
    2024-02-06
    原型链 对象继承 原型 JavaScript JavaScript 内存
  • Java基础入门篇之如何使用面向对象和类的定义
    这篇文章主要讲解了“Java基础入门篇之如何使用面向对象和类的定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java基础入门篇之如何使用面向对象和类的定义”吧!一、面向对象面向对象是在程...
    99+
    2023-06-15
  • 如何进行CPack的入门
    本篇文章给大家分享的是有关如何进行CPack的入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。背景CPack 是 CMake 2.4.2 之...
    99+
    2024-04-02
  • 0基础的人如何入门 Python ?Py
    人生苦短,我用Python,为啥这么说,因为我们自动化测试有金句:学完Python,便可上天 ~废话不多说,相信很多人都听过之前的Python进入小学课本、Python进入浙江省高考等新闻,有这么多头衔加持的Python究竟魅力在哪?为啥说...
    99+
    2023-01-31
    的人 入门 基础
  • 如何进行jQuery UI的入门
    如何进行jQuery UI的入门,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。jQuery ui 是基于 jquery  基础类...
    99+
    2024-04-02
  • 如何进行Python Numpy的入门
    如何进行Python Numpy的入门,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pa...
    99+
    2023-06-02
  • 如何进行linux SELinux入门
    小编今天带大家了解如何进行linux  SELinux入门,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“如何进行linux...
    99+
    2023-06-28
  • 如何进行DOM模型的入门
    如何进行DOM模型的入门,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。向大家描述一下DOM模型的概念,DOM是DocumentObject...
    99+
    2024-04-02
  • 如何对Json入门文档进行详细分析
    本篇文章给大家分享的是有关如何对Json入门文档进行详细分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Json入门文档,作为一种数据操纵语...
    99+
    2024-04-02
  • Android基础入门之dataBinding如何使用
    这篇“Android基础入门之dataBinding如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android基础...
    99+
    2023-07-02
  • 如何进行SQLite快速入门
    这篇文章给大家介绍如何进行SQLite快速入门,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。SQLite基础什么是SQLiteSQLite是一款轻型的嵌入式数据库它占用资源非常的低,在...
    99+
    2024-04-02
  • 如何进行vue组件入门
    本篇文章给大家分享的是有关如何进行vue组件入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。初识组件应用实例化多个vue对象用new创建多个vue对象并命名,可以通过变量相互...
    99+
    2023-06-22
  • 如何进行python快速入门
    这期内容当中小编将会给大家带来有关如何进行python快速入门,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。九九乘法表for i in range(1,10): &...
    99+
    2023-06-25
  • 如何对Kubernetes对象的状态进行管理
    这篇文章的内容主要围绕如何对Kubernetes对象的状态进行管理进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!我们下面主要聚焦于探究如何对Kube...
    99+
    2023-06-04
  • Python基础09 面向对象的进一步拓展
    我们熟悉了对象和类的基本概念。我们将进一步拓展,以便能实际运用对象和类。调用类的其它信息上一讲中提到,在定义方法时,必须有self这一参数。这个参数表示某个对象。对象拥有类的所有性质,那么我们可以通过self,调用类属性。...
    99+
    2023-06-02
  • 如何进行web.py数据库入门
    如何进行web.py数据库入门,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。web.py是一个非常精巧的web框架,不过其自带的db模块也...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作