小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

JS Promise 理解

JavaScript 额外说明

收录于:52天前

    const p = new Promise((resolve, reject) => {
      console.log('create new promise');
      try {   //异步执行
        this.ljccc(); //未定义,抛出异常,转而执行reject
      } catch (err) {
        reject('error');
      }
    });
    console.log('after new  promise');

    p.then((value) => {
      console.log(value);
    }).catch((err) => {
      console.log(err);  //获取上面reject中的error,并打印出来。
    });

上面的执行结果是:

create new promise

after new  promise

error                        --------异步执行reject

const p = new Promise((resolve, reject) => {
      console.log('create new promise');
      try {      //异步执行
        resolve('success');
      } catch (err) {
        reject('error');
      }
    });
    console.log('after new  promise');

    p.then((value) => {
      console.log(value); //获取上面resolve中的success,并打印出来
    }).catch((err) => {
      console.log(err);
    });

上面的执行结果是:

create new promise

after new  promise

success --------异步执行resolve

所谓Promise,从字面上可以理解为“承诺”,也就是说,A调用B,B返回一个“承诺”给A。那么A在写计划的时候可以这样写:当B返回结果给A时对我来说,A执行计划S1,另一方面,如果B因为某种原因没有给A他想要的结果,那么A就会执行应急计划S2。这样,所有潜在的风险都在A的掌控之中。

Promise 规范如下:

  • 一个 Promise 可能具有三种状态:待定、已履行和已拒绝。
  • Promise 的状态只能从“等待”更改为“完成”或“拒绝”,而不能反向转换。同时,“已完成”状态和“已拒绝”状态不能相互转换。
  • promise必须实现then方法(可以说,then就是promise的核心),而且then必须返回一个promise,同一个promise的then可以调用多次,并且回调的执行顺序跟它们被定义时的顺序一致
  • then 方法接受两个参数。第一个参数是成功时的回调,当 Promise 从“等待”状态转换到“完成”状态时调用。另一个是失败时的回调,当 Promise 从“等待”状态转换到“完成”状态时调用。处于“拒绝”状态时调用。同时,then 可以接受另一个传入的 Promise,也可以接受一个“像 then”的对象或方法,即一个 thenable 对象。

Promise实现的总体原理如下:

  构造函数Promise接受一个函数resolver,可以理解为传入一个异步任务,resolver接受两个参数,一个是成功时的回调,一个是失败时的回调,这两参数和通过then传入的参数是对等的。

二是落实。由于 Promise 需要 then 返回一个 Promise,因此调用 then 时会生成一个新的 Promise,该新的 Promise 挂在当前 Promise 的 _next 上。对同一个 Promise 的多次调用只会返回之前生成的 _ next 。

由于then方法接受的两个参数是可选的,并且没有类型限制,它们可以是一个函数,一个特定的值,或者另一个promise。


. . .

相关推荐

额外说明

一分钟轻松解决阿里云盘无法共享压缩包问题

        当你在阿里云云盘分享一个压缩文件的时候,它会提示你“该文件类型暂时不支持分享” 但是,你可能会疑惑的发现有些人是可以分享压缩包类型的文件的,而自己却不可以,这个问题我当时也很疑惑,我就尝试性在网上寻找解决方法,都不是特别理想,最终总结出了

额外说明

我作为测试员已经工作了 8 年。我告诉你现在还能找到软件测试的工作吗!

观点:如果你还是以前的思维来学习测试,那你肯定是找不到工作! 我做测试工作有将近8年的时间,蚂蚁金服做过2年,因为加班太多离职了。目前在一家国企上市公司,一年能拿三四十个左右,对比头部互联网公司来说,国企的技术人员工资真的很低,但是非常适合养老,我目前很

额外说明

【数据结构与算法】Vue3实现选择排序动画效果与原理拆解

系列文章目录 删除有序数组中的重复项 JavaScript实现选择排序 文章目录 系列文章目录 1、选择排序的原理 1.1、选择排序的基本步骤 1.2、拆解思路 2、动画演示原理 3、代码实现 4、优化后的选择排序 5、用Vue3实现选择排序的动画效果(

额外说明

【Linux网络编程】网络编程初体验

文章目录 前言 目标与安排 网络编程核心概念与模式 核心概念 初探网络编程接口 客户端编程初体验 The End 前言 虚拟机类型:Ubuntu 20.04.1,代码编写:vs code windows连接工具NetAssist:链接:https://p

额外说明

LVS讲解及采用 LVS DR 负载高可用 Nginx 集群

一、LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,

额外说明

家居设计范例

研究了一下如何进行3D的家居设计,发现了一个好用的软件酷家乐,不需要安装到本地,直接在网站上进行在线设计就可以。具体用法也比较简单,按照户型图的尺寸来画墙,门窗等等,之后可以用素材库里面的家具来进行摆放,里面有不同的风格可以选择。 这里展示一下我的设计,

额外说明

MySQL实战 | MySQL日志模块—redo log和 binlog

一个更新语句执行的时候整个过程跟查询的步骤是类似的,具体可以看之前的文章:MySQL实战 | MySQL逻辑架构—一条查询SQL是如何执行的,在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句就会把表上所有缓存结果都清空。这也就是我们一般

额外说明

go使用swagger创建接口文档只看这个就够了

流程 下载依赖->添加注释->导入依赖->设置路由->执行初始化命令:swag init-> main函数所在.go导入新生成的包docs->再次执行初始化命令:swag init->打开swagger网页 下载并使用依赖 下载依赖 go get -u

额外说明

Windows系统msutb.dll文件丢失找不到的解决办法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个msutb.dll文件(挑选

额外说明

wordpress 菜单_如何在WordPress主题中添加菜单说明

WordPress 菜单 WordPress 菜单系统有一个内置功能,您可以在其中添加菜单项的描述。但是,此功能默认是隐藏的。即使启用,也不支持在不添加一些代码的情况下显示它们。大多数主题在设计时并未考虑菜单项描述。在本文中,我们将向您展示如何在 Wor

ads via 小工具