iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >promise是不是es6的
  • 496
分享到

promise是不是es6的

2023-07-04 13:07:00 496人浏览 薄情痞子
摘要

本篇内容主要讲解“promise是不是es6的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“promise是不是es6的”吧!是的。promise是ECMAScript 6新增的引用类型,表示一

本篇内容主要讲解“promise是不是es6的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“promise是不是es6的”吧!

是的。promise是ECMAScript 6新增的引用类型,表示一个异步操作的最终完成或者失败。promise是解决异步编程调用代码逻辑编写过于复杂的问题的,当网络请求非常复杂时,就会出现回调地狱,这样如果将这些代码写在一起就会看起来很复杂,且不利于阅读,如果用promise的话就会让代码看起来更加美观优雅。

ECMAScript 6 增加了对 Promises/A+ 规范的完善支持,即 Promise 类型。一经推出,Promise 就大受欢迎,成为了主导性的异步编程机制。所有现代浏览器都支持 ES6 期约,很多其他浏览器 api 也以期约为基础。

Promise 是 ECMAScript 6 新增的引用类型,表示一个异步操作的最终完成或者失败。

一、promise函数是干什么的

promise函数是解决异步编程调用代码逻辑编写过于复杂的问题的,当网络请求非常复杂时,就会出现回调地狱,这样如果将这些代码写在一起就会看起来很复杂,且不利于阅读,如果用promise的话就会让代码看起来更加美观优雅

二、Promise三种状态

首先, 当我们开发中有异步操作时, 就可以给异步操作包装一个Promise
异步操作之后会有三种状态

pending:等待状态,比如正在进行网络请求,或者定时器没有到时间。fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()reject:拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()

三、实现

1,then和catch

1.出于未决状态的函数是同步的 会立即执行
2.then和catch是异步的 就算promise对象里面没有异步操作 让then方法或者catch立即执行 那么 这里两个方法或被加入到事件队列中等待执行

//参数 函数(resolve,reject)    new Promise((resolve, reject) => {        setTimeout(() => {            //请求成功的时候调用resolve            resolve('22222')            //请求失败的时候调用reject            reject('error message')        }, 1000)    }).then((data) => { //请求成功处理函数        console.log(data)    }).catch((err) => { //请求失败处理函数        console.log(err)    })

2.确定状态

在未决状态的处理函数中 如果发生未捕获的错误呀 那么状态就会有pending 直接变成 rejected状态 并且可以被catach捕获

var pro = new Promise((resolve, reject) => {            throw new Error("123");            // try{            //     throw new Error("123");             // } catch(e) {}            resolve(12);            reject(34);        })        // pro.then(data => {        //     console.log(data);        // }, err => {        //     console.log(err);        // })        console.log(pro);                pro.then(data => {            console.log(data);                    })        pro.catch(data => {            console.log(data);                    })

3.async和await

1.使用Promise:

const makeRequest = () =>        getJSON().then(data => {            console.log(data)            return "done"        })    makeRequest()

2.使用Async:

async和await 是ES7提出来的
async作用:简化函数返回值中promise对象的创建
一般情况下, async写在函数的最前面,被修饰的函数的返回值 ,一定是promise对象。只有在某些特殊情况下 才会手动返回一个promise对象。

作用:和promise一样 解决异步问题 但是他的好处在于 让异步代码和同步的一样!!
注意点 : 同步方法我们拿到结果 是通过返回值,异步方法拿到结果,是靠回调函数。

async 和await使用的基本语法 :

  • 就是在普通函数前面加一个async 调用跟普通函数一样

  • async出现使用 一般都要和await配合使用

  • await后面接的就是一个promise对象 await一定是在异步函数中使用的

const makeRequest = async () => { // await getjsON()表示console.log会等到getJSON的promise成功reosolve之后再执行。        console.log(await getJSON)        return "done"    }    makeRequest()

3.区别

函数前面多了一个aync关键字。await关键字只能用在aync定义的函数内。async函数会隐式地返回一个promise,该promise的reosolve值就是函数return的值。(示例中reosolve值就是字符串”done”)
2.我们不能在最外层代码中使用await,因为不在async函数内。

四.promise方法

var r1 = new Promise((resolve,reject) => {            setTimeout(function(){                resolve("我是第一个请求");            },1000)        })        var r2 = new Promise((resolve,reject) => {            setTimeout(function(){                resolve("我是第二个请求");            },3000)        })        var r3 = new Promise((resolve,reject) => {            setTimeout(function(){                resolve("我是第三个请求");            },4000)        })        var r4 = new Promise((resolve,reject) => {            setTimeout(function(){                resolve("我是第四个请求");            },500)        })

1.all方法

有时候我们需要等待两个或者多个请求都成功返回了再进行下一步操作,promise 的all方法是等所有的异步请求完成之后在进行下一步回调

Promise.all([r1,r2,r3,r4]).then(data => {            console.log(data);                    })

2.race方法

请求同时发送出去 谁先回来 就是用谁的数据。

Promise.race([r1,r2,r3,r4]).then(data => {           console.log(data);                  })

五.promise封装ajax案例

<script>       function toData(obj) {                              // 声明一个数组 来装每一组的数据               var arr = [];               if(obj !== null) {                   for(var key in obj) {                       let str = key + "=" + obj[key];                       arr.push(str);                   }                   return arr.join("&");               }       }       function ajax(obj) {           return new Promise(function(resolve, reject) {               // 给ajax所需要的参数设置默认值               obj.type = obj.type || "get";               obj.async = obj.async|| "true";               obj.dataType = obj.dataType || "json";               obj.data = obj.data || null;               // 开始发送ajax请求               var xhr;               if(window.XMLHttpRequest) {                   xhr = new XMLHttpRequest();               } else {                   // IE低版本的浏览器                   xhr = new ActiveXObject("Microsoft.XMLHttp");               }               // 判断是post请求 还是get请求               if(obj.type === "post") {                   xhr.open(obj.type, obj.url, obj.async);                   // 设置请求头                   xhr.setRequestHeader("Content-Type", "application/x-www-fORM-urlencoded");                   xhr.send(toData(obj.data));               } else {                   var url = obj.url + "?" + toData(obj.data);                   xhr.open(obj.type, url, obj.async);                   xhr.send();               }               // 处理响应体               xhr.onreadystatechange = function() {                   if(xhr.readyState == 4) {                       if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {                           resolve(JSON.parse(xhr.responseText));                       } else {                           reject(xhr.status);                       }                   }               }           })       }       ajax({           url : "./data.PHP",           data : {               name : "jack",               age : 16           }       }).then(res => {           console.log(res);                  }, err => {           console.log(err);                  })      </script>

到此,相信大家对“promise是不是es6的”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: promise是不是es6的

本文链接: https://www.lsjlt.com/news/345235.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • promise是不是es6的
    本篇内容主要讲解“promise是不是es6的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“promise是不是es6的”吧!是的。promise是ECMAScript 6新增的引用类型,表示一...
    99+
    2023-07-04
  • promise类型是不是es6的
    这篇“promise类型是不是es6的”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“pro...
    99+
    2024-04-02
  • promise是es6的吗
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。ECMAScript 6 增加了对 Promises/A+ 规范的完善支持,即 Promise 类型。一经推出,Promise 就大受欢迎,成为了主导性的...
    99+
    2022-11-22
    ES6 promise
  • es6中promise对象的状态是什么
    这篇文章主要介绍“es6中promise对象的状态是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es6中promise对象的状态是什么”文章能帮助大家解决问题...
    99+
    2024-04-02
  • foreach是不是es6里的
    本文小编为大家详细介绍“foreach是不是es6里的”,内容详细,步骤清晰,细节处理妥当,希望这篇“foreach是不是es6里的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • es2017是不是es6
    这篇文章主要介绍“es2017是不是es6”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es2017是不是es6”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • es2015是不是es6
    这篇文章主要介绍了es2015是不是es6的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇es2015是不是es6文章都会有所收获,下面我们一起来看看吧。es2015是es6。es全称“ECMAScript”,是...
    99+
    2023-07-04
  • es6的class是不是函数
    本篇内容介绍了“es6的class是不是函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • let是不是es6的语法
    这篇文章主要介绍了let是不是es6的语法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇let是不是es6的语法文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • es6是不是框架
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。es6不是框架,而是一种JavaScript语言的标准。es6全称ECMAScript6(ECMAScript的第6个版本),是于2015年6月正式发布的...
    99+
    2022-11-22
    javascript ES6
  • react.js是不是用es6写的
    这篇文章主要介绍了react.js是不是用es6写的的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react.js是不是用es6写的文章都会有所收获,下面我们一起来看看吧。react.js是用es6写的,可以用...
    99+
    2023-07-04
  • filter是不是es6的方法
    这篇“filter是不是es6的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“filt...
    99+
    2024-04-02
  • es6中promise是什么及有哪些作用
    这篇文章主要讲解了“es6中promise是什么及有哪些作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“es6中promise是什么及有哪些作用”吧! ...
    99+
    2024-04-02
  • ES6的Promise怎么用
    这篇文章主要为大家展示了“ES6的Promise怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ES6的Promise怎么用”这篇文章吧。什么是PromisePromise 是异步编程的一种...
    99+
    2023-06-22
  • assign是不是es6方法
    这篇文章将为大家详细讲解有关assign是不是es6方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 assign是es6方法。assign...
    99+
    2024-04-02
  • sort排序是不是es6中的
    今天小编给大家分享一下sort排序是不是es6中的的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2024-04-02
  • require是不是es6语法
    本篇内容主要讲解“require是不是es6语法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“require是不是es6语法”吧!不是,require是CommonJS规范的模块化语法;而es6...
    99+
    2023-07-04
  • map是不是es6中的方法
    这篇文章主要讲解了“map是不是es6中的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“map是不是es6中的方法”吧! m...
    99+
    2024-04-02
  • Set是不是ES6的新特性
    本篇内容介绍了“Set是不是ES6的新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • js map方法是不是es6的
    本文小编为大家详细介绍“js map方法是不是es6的”,内容详细,步骤清晰,细节处理妥当,希望这篇“js map方法是不是es6的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。map()方法是es6的。在es6...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作