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


相关推荐

  • Java注释@interface的用法

    Java注释@interface的用法java用@interfaceAnnotation{} 定义一个注解@Annotation,一个注解是一个类@Override,@Deprecated,@SuppressWarni

    2022年7月4日
    22
  • python怎样读取文件夹里的图片_python图片处理及识别

    python怎样读取文件夹里的图片_python图片处理及识别Python进行图片处理,第一步就是读取图片,这里给大家整理了6种图片的读取方式,并将读取的图片装换成numpy.ndarray()格式。首先需要准备一张照片,假如你有女朋友的话,可以用…

    2025年11月1日
    1
  • PyCharm安装torch以及pytorch-pretrained-bert简单使用

    PyCharm安装torch以及pytorch-pretrained-bert简单使用安装torch运行Pycharm中的代码时候提示ModuleNotFoundError:Nomodulenamed‘torch’。试了很多种方法都不行,然后进入官网查了下具体的安装方法,附上网址https://pytorch.org/get-started/previous-versions/。摘取一段放在这里供大家参考。#CUDA10.0pipinstalltorch===1.2.0torchvision===0.4.0-fhttps://download.pytorc

    2022年8月28日
    3
  • IDEA下将一个普通的maven项目转换为一个web项目

    IDEA下将一个普通的maven项目转换为一个web项目

    2021年8月23日
    60
  • Canvas之translate、scale、rotate、skew方法讲解!「建议收藏」

    Canvas之translate、scale、rotate、skew方法讲解!「建议收藏」前面说Canvas大致可以分为三类:1.save、restore等与层的保存和回滚相关的方法;2.scale、rotate、clipXXX等对画布进行操作的方法;3.drawXXX等一系列绘画相关的方法;前面主要讲了drawBitmap方法,并举了一个星球浮动的栗子,在那个例子中,星球有大有小,需要移动,有时候可能需求上还需要旋转或错切,有了这些需求,我们就需要使用到与Canvas相关的translate、scale、rotate、skew这几个方法,平移、缩放、旋转、错切,这四个词听起

    2025年8月6日
    2
  • 推荐系统中的常用算法——Wide & Deep

    推荐系统中的常用算法——Wide & Deep这篇文章是阅读《Wide&DeepLearningforRecommenderSystems》后的总结,该文章中提出结合Wide模型和Deep模型的组合方法,对于提升推荐系统(RecommendationSystem)的性能有很重要的作用。1、背景本文提出Wide&Deep模型,旨在使得训练得到的模型能够同时获得记忆(memorization)…

    2022年5月23日
    39

发表回复

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

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