浅析Promise用法[通俗易懂]

浅析Promise用法[通俗易懂]浅析Promise用法要理解Promise要知道没有Promise的回调地狱如何插入一段漂亮的代码片Promise语法与then的用法所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。Promis…

大家好,又见面了,我是你们的朋友全栈君。

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise对象有以下两个特点。

(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。


要理解Promise要知道没有Promise的回调地狱

一般我们要在一个函数执行完之后执行另一个函数我们称之为callback‘回调’,简单的写一下

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

setTimeout(function(){ 
     left(function(){ 
     setTimeout(function(){ 
     left(function(){ 
     setTimeout(function(){ 
     left(); },2000); }); }, 2000); }); }, 2000); 

以上代码就是传说中的回调地狱,如果有多层业务逻辑嵌套的话,不仅会使代码阅读困难,而且后面维护起来也是难点。
之后在ES6,Promise就应运而生。

Promise语法与then的用法

var promise = new Promise(function(resolve, reject) { 
     // ... some code if (/* 异步操作成功 */){ 
     resolve(value); } else { 
     reject(error); } }); 

resolve(value)是在Promise在已经异步完成成功(Resolved)之后执行的reject(value)是在Promise在异步失败之后(Rejected)执行。当然,也可以用then来指定:then(resolve,reject)或者:then(resolve),catch(reject)

promise.then(function(value) { 
     // success }, function(error) { 
     // failure }); //等价于: promise.then(function(){ 
     //success }).catch(function(){ 
     //failure }) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150767.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月19日 下午8:00
下一篇 2022年6月19日 下午8:16


相关推荐

  • java数据库查询类建议收藏

    通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询。类的代码:1packagecom.hongyuan.db;23importjava.math.BigDecimal

    2021年12月20日
    51
  • 滤波算法(四)—— 卡尔曼滤波算法[通俗易懂]

    滤波算法(四)—— 卡尔曼滤波算法[通俗易懂]一、算法介绍卡尔曼滤波是一个神奇的滤波算法,应用非常广泛,它是一种结合先验经验、测量更新的状态估计算法。1、状态估计首先,对于一个我们关心的物理量,我们假设它符合下面的规律其中,为该物理量本周期的实际值,为该物理量上一个周期的实际值,当然这个物理量可能不符合这个规律,我们只是做了一个假设。不同的物理量符合的规律不同,是我们的经验,我们根据这个规律…

    2022年6月13日
    31
  • 两种方式创建SqlSessionFactory[通俗易懂]

    两种方式创建SqlSessionFactory[通俗易懂]前提:已经完成了MyBatis环境的搭建!!!一、使用配置文件创建SqlSessionFactory开始Code了:packagecom.littlestar.util;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache…

    2022年6月6日
    87
  • Linux下配置bond0

    Linux下配置bond01.使用network接管网络服务,停止使用NetworkManager,如若没有network服务,安装network-scripts安装包即可2.做之前备份网卡配置文件。配置模板前景要求:6个网口,两两配置bond0,连接名分别为servicebond、cloudbond、storagebond,三个平面的VLanID分别为19,320,414一、配置连接名#vim/etc/sysconfig/network-scripts/ifcfg-servicebond

    2022年4月6日
    180
  • 手摸手教你写一个vue的toast弹窗[通俗易懂]

    手摸手教你写一个vue的toast弹窗[通俗易懂]前言:我们在项目开发的过程中,也许会在很多页面实现弹窗的消息,普通的方法就是在这每个界面写些原生js代码来控制弹窗效果,这样明显非常冗余。可通过引入组件的方式,可解决部分冗余的代码,但是每个要使用的界面都必须导入、注册、使用,这些代码还是比较冗余。通过插件的方式封装Toast,可解决每个页面重复导入、注册、使用的重复过程。一.封装Toast组件css自行设计二.Toast插件方式的封装在使用Toast前需要做相应的准备工作:添加一个index.js文件-里面定义一个对象-然后导

    2026年3月9日
    8
  • Initramfs_正在生成initramfs

    Initramfs_正在生成initramfs一、initramfs是什么  在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。如果内核没有在rootfs中

    2022年8月11日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号