Promise的含义和用法「建议收藏」

Promise的含义和用法「建议收藏」含义Promise是异步编程的一种解决方案。Promise对象有以下2个特点:1.对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其…

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

这里写图片描述
含义
Promise是异步编程的一种解决方案。

Promise对象有以下2个特点:
1.对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:**Pending(进行中)、Resolved(已完成)和Rejected(已失败)。**只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
2.一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved;从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对Promise对象田静回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。

Promise构造函数有俩参数: resolve reject
2.用法

function runAsync1(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('异步任务1执行完成'); resolve('随便什么数据1'); }, 2000); }); return p; } function runAsync2(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('异步任务2执行完成'); resolve('随便什么数据2'); }, 2000); }); return p; } function runAsync3(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('异步任务3执行完成'); resolve('随便什么数据3'); }, 2000); }); return p; } runAsync1() .then(function(data){ console.log(data); return runAsync2(); }) .then(function(data){ console.log(data); return runAsync3(); }) .then(function(data){ console.log(data); });这里写图片描述
每隔两秒执行
它们是层层依赖的关系,下一步的的操作需要使用上一部操作的结果。(这里使用 setTimeout 模拟异步操作)
使用 then 链式调用这三个方法

异步加载图片

function loadImageAsync(url){
  return new Promise(function(resolve,reject){
    var image = new Image();
    image.onload = function(){
      resolve(image);
    };
    image.onerror = function(){
      reject(new Error('Could not load image at' + url));
    };

    image.src = url;
  });
}

这里写图片描述
resolve(this.response);//会将参数传递给回调函数
then方法可以接受两个回调函数作为参数,第一个回调函数是promise对象状态变为resolved时候调用,第二个回调函数是promise对象的状态为reject时调用

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pyqt5安装配置_离线安装pyqt5

    pyqt5安装配置_离线安装pyqt5请按顺序进行依次执行.1、更新pip:python-mpipinstall–upgradepip-ihttps://pypi.tuna.tsinghua.edu.cn/simple如果上一步无法安装成功请执行则执行:python-mpipinstall-U–force-reinstallpip2、安装sip:pipinstallsip-ihttps://pypi.tuna.tsinghua.edu.cn/simple3、安装pyqt5

    2025年8月9日
    1
  • 在c#项目中用NPOI导出excel

    在c#项目中用NPOI导出excel用NPOI导出excel(加载的是已有的excel模板,当然也可以创建空的excel)具体步骤:1、下载NPOI插件。地址:http://npoi.codeplex.com/releases/view/381132、在工程中添加引用。3、在需要用到NPOI的地方using4、下面就可以在代码中进行操作了。若行或者单元格中没有数据时,那么获取到的结果是null,必须在获取之前进行创建。5、最后必须…

    2022年6月17日
    223
  • mybatis 分页查询避免两次查询同时返回总数和数据

    mybatis 分页查询避免两次查询同时返回总数和数据分页查询一般分成两次查询一次查总数一次查列表,下面这种写法可以一次返回sql<resultMapid=”queryOrderListResultMap”type=”要返回数据的类型”></resultMap><resultMaptype=”Long”id=”queryOrderListCount”autoMappin…

    2022年5月24日
    41
  • navicat激活码最新(JetBrains全家桶)

    (navicat激活码最新)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月30日
    77
  • C#文件流FileStream的用法[通俗易懂]

    C#文件流FileStream的用法[通俗易懂]1、简介FileStream类:主要用于对文件进行读取、写入、打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream对输入输出进行缓冲,从而提高性能。——MSDN**简单点说:FileStream类可以对任意类型的文件进行读取操作,可根据需要来指定每次读取的字节长度(这是比File类优秀的地方之一),…

    2022年7月21日
    17
  • java中volatile的作用_java中volatile关键字的作用与用法,讲的很透彻

    java中volatile的作用_java中volatile关键字的作用与用法,讲的很透彻volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”。volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正确性”,也就是说不保证线程执行的有序性。也就是说,volatile变量对于每次使用,线程都能得到当前volatile变量的最新值。但是volatile变量并不保证并发的正确性。=============…

    2022年5月28日
    33

发表回复

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

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