浅析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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Swoole和Swoft的那些事 (Http/Rpc服务篇)

    Swoole和Swoft的那些事 (Http/Rpc服务篇)

    2021年11月4日
    52
  • 微信模拟位置想在哪就在哪(GPS欺骗)

    微信模拟位置想在哪就在哪(GPS欺骗)微信模拟位置是通过位置欺骗,让微信误以为我们就在当前的位置进行周边好友的搜索与添加。这是一个很老的功能,为什么说很老呢?因为这是在android4.1的时候流行的一个功能,android在4.4推出后这个功能基本不能使用了!即使很老但是最近也碰到了这样的需求,不过针对特殊的群体,手机定制而来,就没有限制了!首先我们要知道怎么用:首先:我们从设置里找到开发者选项(开发者都知道):在这里就是,开发人

    2022年4月30日
    54
  • html背景图片的设置宽高_网页的背景图片怎么设置

    html背景图片的设置宽高_网页的背景图片怎么设置背景图片的设置,背景图片大小、位置、是否重复以及附着点的问题

    2022年10月5日
    3
  • Vue菜鸟教程

    Vue框架快速入门1.Vue的认识1.1什么是Vue?Vue是一个开源的javascript框架,并且Vue支持mvc和mvvm两种模式。Vue是一个构建数据驱动的web界面的渐进式框架。采用自底向上增量开发的设计。Vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件,是又一个js库。MVC:Model(模型),View(视图),Controller(…

    2022年4月9日
    10.1K
  • 为什么L1正则化导致稀疏解「建议收藏」

    一、从数据先验的角度首先你要知道L1范式和L2范式是怎么来的,然后是为什么要把L1或者L2正则项加到代价函数中去.L1,L2范式来自于对数据的先验知识.如果你认为,你现有的数据来自于高斯分布,那么就应该在代价函数中加入数据先验P(x),一般由于推导和计算方便会加入对数似然,也就是log(P(x)),然后再去优化,这样最终的结果是,由于你的模型参数考虑了数据先验,模型效果当然就更好.哦对了,如果你…

    2022年4月12日
    70
  • kernel dma protection_系统感知进程的唯一实体是

    kernel dma protection_系统感知进程的唯一实体是为BCG界面库的记忆特性所晕倒同事使用BCGControlBarPro处理界面,今天在修改菜单资源时却发生一件很奇怪的事情:无论怎么修改,程序运行后始终显示的还是改动以前的菜单,多次清空临时文件、生成文件以及重新编译也无济于事。同事为此折腾了一个上午,郁闷得不行。我用UltraEdit搜索了一下整个工程,并没有发现以前的字符串资源,因此排除了是编译器的问题。不是编译器的问题,那么就只能是BCG的问题了,我怀疑是BCG对资源进行了“记忆”处理,为了验证这一想法,我让同事将新生成的程序拷贝到一台没有使用过该程序

    2022年10月8日
    0

发表回复

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

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