什么是promise?

这篇具有很好参考价值的文章主要介绍了什么是promise?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
    • 总结

一、promise是什么?

promise是es6新增的API,用于异步任务的封装

promise用法1:封装ajax请求,在ajax回调函数之外使用请求数据

二、认识promise

1.使用计时器模拟一个ajax的请求过程

let   myMessage;
seTimeout(()=>{
var data={ msg:"这是ajax请求的数据"}
myMessage=data.msg;
// 异步请求,得到的数据会在异步函数的回调函数中接受,一般仅在回调函数中使用,能不能在回调函数外部使用
},Math.random()*1000)
// 使用全局变量接受回调函数中的数据,根本拿不到数据,因为全局变量使用的时候,异步任务还没有结束没有数据
console.log(myMessage) //undefined

// 使用计时器,等待异步函数任务结束,数据请求完成之后使用数据,计时器的时间不好确定,如果时间过长,会造成数据响应渲染延迟,影响用户体验,如果时间过短,就有可能拿不到数据,造成数据渲染出错

setTimeout(()=>{
    console.log(myMessage);
},6000)//6000毫秒后才会拿到数据,影响用户体验

*因为异步函数任务没有结束时,我们是拿不到异步函数中的变量的,我们可以通过计时器使我没获取数据的代码6000毫秒后执行但是这样非常影响用户体验

2.接下来我们使用promise封装一个请求,理解promise的作用

代码如下(示例):

var promise=new Promise((reslove,reject)=>{
    setTimeout(()=>{
        var data = { msg: "这是ajax请求的数据" }
        reslove(data.msg)

    },Math.random()*100)
})
promise.then(data=>{
    console.log(data);
})

*使用promise封装请求我们就可以在不使用计数器的情况下既能获取到数据又不影响用户的体验


总结:使用promise封装ajax请求数据的步骤

1.新建一个promise对象,
Promise((resolve,reject)=>{}
2.在promise对象创建的函数中发起ajax请求
3.请求完成 调用resolve函数把请求的数据传递出去 resovle(data.msg)
4.在全局范围内,需要使用数据的地方,通过promise对象调用then方法就可以读取的数据

解释promise的语法和原理

es6新增的构造函数,Promise() 用于创建一个promise对象

Promise()构造函数的参数是一个匿名函数,在这个匿名函数中执行异步操作(ajax请求,fs文件操作,数据操作....)

let myPro=new Promise(function(resolve,reject){
    // 这两个匿名函数的两个参数reslove,reject也是函数,用于向promise对象传送数据

    // 异步请求成功的时候,调用reslove函数,把请求成功的数据创送个promise对象
    // 异步请求失败的时候,调用reject函数,把请求失败的数据传送给promise对象
    if(Math.random()>0.5){
        resolve("异步执行结果")
    }else{
        reject("异步请求错误信息")
    }
    // 一个promise对象可能三个状态
    // pending:等待状态,promise对象创建之后默认状态
    // reslove:完成状态,调用relove()函数之后,更新的状态
    // reject:失败的状态,调用reject()函数之后更新的状态
    // 注意promise的状态只能有pending变为reslove或者reject,并且只能修改一次不能重复修改
})

当promise对象状态发生改变的时候,会立即调用then函数,then函数有两个参数

1.成功状态下的回调

2.失败状态下的回调

 失败状态的回调函数可以省略 也可以写为箭头函数文章来源地址https://www.toymoban.com/news/detail-411296.html

myPro.then(function(data){
    console.log(data);
},function(err){
    console.log(err);
})

// 失败状态的回调函数也可以用catch()获取
myPro.catch(function(err){
    console.log(err);
})

到了这里,关于什么是promise?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 学习目录合集【文章索引】

    前言:本内容为笔者自学笔记内容。 本文中的操作环境:腾讯云服务器:CentOS 7.6 64bit 学习阶段规划: Linux 基本操作【基本命令、vim、makefile使用等】 Linux 系统【进程:概念、控制、通信;IO基础;多线程等】 Linux 网络【网络基础、套接字编程、IO高级等】 学习集: C++ 入门

    2024年02月07日
    浏览(52)
  • FlinkCDC 菜鸟教程-文章目录

    背景篇 环境篇  准备一台已经安装了 Docker 的 Linux 或者 MacOS 电脑。 准备教程所需要的组件 版本对应关系 安装 环境检查 工具篇 flink kibana 概念篇 Docker 介 绍 Docker Compose 介 绍 Kibana介 绍 实践篇 演示: Mysql CDC 导入 Elasticsearch 启动服务 准备数据 在 Flink SQL CLI 中使用 Flink DDL 创建

    2024年02月09日
    浏览(53)
  • 什么是Promise对象?它的状态有哪些?如何使用Promise处理异步操作?以及 async、await

    前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一

    2024年02月11日
    浏览(46)
  • 【数据结构】【王道】【数据结构实现】文章目录

    持续更新中。。。 数据结构 链接 顺序表实现及基本操作(可直接运行) 文章链接 无头结点单链表的实现及基本操作(可直接运行) 文章链接 带头结点单链表的实现及基本操作(可直接运行) 文章链接 双链表的实现及基本操作(可直接运行) 文章链接 循环链表的实现及

    2023年04月08日
    浏览(92)
  • vscode 系列文章目录 - ctrl+鼠标左键无效

    vscode 中有时会遇到 “Alt + 鼠标点击” 有效,但 “Ctrl + 鼠标点击” 无效,这时可以通过 Ctrl + , 进行系统配置。 进入VScode的首选项,选择设置(快捷键 Ctrl + , ),输入Go to definition,找到如下两个设置。 Editor: Multi Cursor Modifier 设置成 alt “editor.gotoLocation.multipleDefinitions” 设置

    2024年04月23日
    浏览(54)
  • 【vim 学习系列文章 5 - cscope 过滤掉某些目录】

    上篇文章:【vim 学习系列文章 4 - vim与系统剪切板之间的交互】 下篇文章:【vim 学习系列文章 6 – vim 如何从上次退出的位置打开文件】 第一步 创建自己的 cscope 脚本 ~/.local/bin/cscope.sh ,如下: 我的这个脚本首先去区分当前执行 cscope 命令的目录是 rt-thread 目录还是 linux 目

    2024年02月12日
    浏览(84)
  • 一篇文章带你了解SpringBoot目录结构

    前言 SpringBoot是整合Spring技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,是一个能够快速构建生产级别的Spring应用的工具。SpringBoot是目前流行的微服务框架,倡导“约定优于配置”,简化Spring项目搭建及开发过程。springboot提供了很多核心的功能,比如自动化配置

    2024年03月25日
    浏览(71)
  • Git系列文章目录 - Git 子模块git submodule使用

    项目中有时会遇到会涉及子模块的使用,比如 flatpak 项目包含多个子模块。 进入需要添加子模块的目录,一般是项目根目录。 删除子模块目录及源码: 删除项目目录下.gitmodules文件中子模块相关条目: 删除配置项中子模块相关条目: 删除模块下的子模块目录: 清除子模块

    2024年01月20日
    浏览(66)
  • dockerfile不可以使用../作为路径在上级目录查找文件

    在 Dockerfile 中,不能直接使用 …/ 跳转到上级目录。Dockerfile 中的路径是相对于构建上下文路径的,而构建上下文指定了在构建镜像时可访问的文件和目录的范围。 如果你需要在 Dockerfile 中引用上级目录中的文件或目录,可以将上级目录作为构建上下文,并使用相对于构建上

    2024年01月25日
    浏览(39)
  • 目录(文章更新中...)《实战NFT web3 solidity(新版本0.8.+)》

    注:由于是付费专栏内容,若有错误请及时联系@1_bit,博客链接:https://blog.csdn.net/A757291228 ,或在文章下留言,收到后将会对错误进行改正,若是版本更新导致的问题也希望大家对错误进行提交,尽力去保证付费用户该得到的权益。 友情提示:本系列文章读者最好学过一门编

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包