返回顶部
首页 > 资讯 > 前端开发 > VUE >ES6 Promise怎么使用
  • 695
分享到

ES6 Promise怎么使用

2024-04-02 19:04:59 695人浏览 独家记忆
摘要

这篇文章主要介绍“es6 Promise怎么使用”,在日常操作中,相信很多人在ES6 Promise怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ES6 Promis

这篇文章主要介绍“es6 Promise怎么使用”,在日常操作中,相信很多人在ES6 Promise怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ES6 Promise怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1. Promise 之前

1.1 回调函数

回调函数:把函数A当作参数传递给另一个函数B调用,那么A就是回调函数。

一些例子
具名回调

function 你有几只狗(fn){
    fn('一只狗')
}function 数狗(数量){
    console.log(数量)
}
你有几只狗(数狗)   // 一只狗

匿名回调

function 你有几只狗(fn){
    fn('一只狗')
}
你有几只狗(function(数量){console.log(数量) 
})         //  一只狗

常见的例子
Jquery中使用回调函数,这里用的是匿名回调的方式

$("#btn").click(function(){
    console.log('点到我了')
})

1.2 回调地狱(回调缺点1)

回调地狱:指的是回调嵌套过多的情况,导致代码很难被看懂。

let info = []function 你有几只狗(fn){
    fn('一只狗')
}function 你有几只猫(fn){
    fn('一只猫')
}function 知道了(数量,callback){
    info.push(数量)
    console.log(info)    if(callback){
        callback()
    }
}// 开始调用 如果比这再多几层,就不容易看懂了你有几只狗(function(狗数){
    console.log(狗数)
    知道了(狗数, function(){
        你有几只猫(function(猫数){
            console.log(猫数)
            知道了(猫数)
        })
    })
})

1.3 不使用Promise,如何解决

利用具名函数代替匿名函数

let info = []function 你有几只狗(fn){
    fn('一只狗')
}function 你有几只猫(fn){
    fn('一只猫')
}function 知道了(数量,callback){
    info.push(数量)
    console.log(info)    if(callback){
        callback()
    }
}function 告诉你猫的个数(猫数){
    console.log(猫数)
    知道了(猫数)
}function 继续数(){
    你有几只猫(告诉你猫的个数)
}function 告诉你狗的个数(狗数){
    console.log(狗数)
    知道了(狗数, 继续数)
}
你有几只狗(告诉你狗的个数)  // 好像也没好到哪去。。。

1.4 回调方式各不相同,需要单独记忆(回调缺点2)

readFile('C:\\1.txt',function (error, data) {   // node.js 读取文件方法中的回调
        if(error) {
            console.log('成功')
            console.log(data.toString())
        } else {
            console.log('读取文件失败')
        }
    })

$.ajax({                              // jQuery中ajax方法中的回调
    url:'/2.txt'
    success: function(response) {
        console.log('成功')
    },
    error: function(){
        console.log('失败')
    }
})

2. Promise 的目的

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

3. Promise 的原理

3.1 实现原理

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。通过在函数内部return 一个 Promise对象的实例,这样就可以使用Promise的属性和方法进行下一步操作了。

function 函数名(){    return new Promise(function(resolve, reject) {
        // ... some code          if (){
            resolve(value);   // 异步操作成功时调用,把结果作为参数传递出去
          } else {
            reject(error);     // 异步失败时调用,把错误作为参数传递出去
          }

    })
}

3.2 调用逻辑

ES6 Promise怎么使用
S1和E1两个都没有报错,执行S2(resolve执行,系统认为搞定了,没报错)
S1和E1任何一个有报错,执行E2(reject执行,系统认为没搞定,报错了)

4. Promise 的使用

4.1 Promise 的属性与方法

属性
Promise.prototype 表示 Promise 构造器的原型
方法
Promise.prototype.then()
返回一个 Promise 。它最多需要有两个参数:Promise 的成功和失败情况的回调函数。
Promise.prototype.catch()
返回一个Promise,并且处理拒绝的情况。等价于Promise.prototype.then(undefined, onRejected)
Promise.prototype.finally()
finally() 方法返回一个Promise,在执行then()和catch()后,都会执行finally指定的回调函数。避免同样的语句需要在then()和catch()中各写一次的情况。
Promise.all(iterable)
返回一个 Promise 实例,iterable参数内所有的 promise 都resolved后,才回调完成resolve。
Promise.race(iterable)
返回一个 promise ,并伴随着 promise对象解决的返回值或拒绝的错误原因, 只要 iterable 中有一个 promise 对象”解决(resolve)”或”拒绝(reject)”。
Promise.resolve()
返回一个以给定值解析后的Promise对象。但如果这个值是个thenable(即带有then方法),返回的promise会“跟随”这个thenable的对象,采用它的最终状态(指resolved/rejected/pending/settled);如果传入的value本身就是promise对象,则该对象作为Promise.resolve方法的返回值返回;否则以该值为成功状态返回promise对象。
Promise.reject()
返回一个带有拒绝原因reason参数的Promise对象。

4.2 将回调地狱中的例子,改写为Promise的形式

ES6 Promise怎么使用
可以看到使用 Promise后,逻辑变得非常直观
写得更完整一些
ES6 Promise怎么使用
Promise套Promise时,也就是Promise链的时候——注意信息的传递
一个失败的例子,当我们使用Promise链的时候,如果每一步都需要上一步的数据时,就需要传参,成功通过resolve传参,失败通过reject传参,如果忘记传参,就得不到想要的结果。
resolve把成功的数据返回给下一个回调
reject把失败的数据返回给下一个回调。
ES6 Promise怎么使用
给这里的resolve传一个参
ES6 Promise怎么使用
改成失败的例子
先不给reject传参,如果失败的话,下一个回调拿不到数据
ES6 Promise怎么使用
给 reject传参
ES6 Promise怎么使用
我们可以看到,即使是走的失败回调,下一个成功回调还是执行了,由于 不知道() 默认返回undefined, 相当于失败已经处理了,在成功和失败都被处理的情况下,下一个回调会执行的。
改成符合预期的,即失败不调用。
ES6 Promise怎么使用
失败不调用的简写形式
ES6 Promise怎么使用
上述情况执行后 .then(除了狗呢)里面的成功回调没有执行,我们增加一个失败回调看看
ES6 Promise怎么使用
同样也可以返回 resolve,让后面成功回调可以执行
ES6 Promise怎么使用

4.3 应用

加载图片
将图片的加载写成一个Promise,一旦加载完成,Promise的状态就发生变化。

const preloadImage = function (path) {
  return new Promise(function (resolve, reject) {
    const image = new Image();
    image.onload  = resolve;
    image.onerror = reject;
    image.src = path;
  });
};

Generator 函数与 Promise 的结合(详情见参考链接,阮一峰的教程

5. 干掉Promise中的回调

5.1 await

成功的情况
ES6 Promise怎么使用
失败的情况
利用 try catch
ES6 Promise怎么使用
await 配合 try catch使用,比较完整

到此,关于“ES6 Promise怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: ES6 Promise怎么使用

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

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

猜你喜欢
  • ES6 Promise怎么使用
    这篇文章主要介绍“ES6 Promise怎么使用”,在日常操作中,相信很多人在ES6 Promise怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ES6 Promis...
    99+
    2024-04-02
  • es6的promise怎么使用
    今天小编给大家分享一下es6的promise怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2024-04-02
  • es6中promise怎么使用
    这篇文章主要介绍了es6中promise怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇es6中promise怎么使用文章都会有所收获,下面我们一起来看看吧。es6 promise用于异步编程。Promi...
    99+
    2023-07-04
  • ES6中怎么使用Promise对象
    这期内容当中小编将会给大家带来有关ES6中怎么使用Promise对象,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在promise之前处理异步回调的方式function&...
    99+
    2024-04-02
  • ES6中Promise怎么用
    这篇文章主要为大家展示了“ES6中Promise怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ES6中Promise怎么用”这篇文章吧。Promise 基...
    99+
    2024-04-02
  • ES6的Promise怎么用
    这篇文章主要为大家展示了“ES6的Promise怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ES6的Promise怎么用”这篇文章吧。什么是PromisePromise 是异步编程的一种...
    99+
    2023-06-22
  • ES6的Promise如何使用
    本篇内容介绍了“ES6的Promise如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所谓Promise,简单说就是一个容器,里面保存...
    99+
    2023-06-27
  • ES6中如何使用Promise对象
    这篇文章主要介绍了ES6中如何使用Promise对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中如何使用Promise对象文章都会有所收获,下面我们一起来看看吧。在promise之前处理异步回调的方式...
    99+
    2023-06-17
  • 怎么理解ES6 Promise对象
    这篇文章主要讲解了“怎么理解ES6 Promise对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解ES6 Promise对象”吧!概述是异步编程的...
    99+
    2024-04-02
  • Node.js中ES6模块化及Promise对象怎么使用
    本文小编为大家详细介绍“Node.js中ES6模块化及Promise对象怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中ES6模块化及Promise对象怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-02
  • es6中promise什么时候用
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。Promise的含义Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6将其写进了...
    99+
    2022-11-22
    javascript promise ES6
  • ES6的Promise用法详解
    目录什么是Promisereject的用法catch的用法all的用法race的用法什么是Promise Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有al...
    99+
    2024-04-02
  • JavaScript Promise怎么使用
    今天小编给大家分享一下JavaScript Promise怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2024-04-02
  • 怎么使用Promise方法
    这篇文章主要介绍“怎么使用Promise方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Promise方法”文章能帮助大家解决问题。 以下是使用 Pro...
    99+
    2024-04-02
  • es6中promise是什么及有哪些作用
    这篇文章主要讲解了“es6中promise是什么及有哪些作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“es6中promise是什么及有哪些作用”吧! ...
    99+
    2024-04-02
  • JavaScript的Promise类怎么使用
    这篇文章主要介绍了JavaScript的Promise类怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript的Promise类怎么使用文章都会有所收获,下...
    99+
    2024-04-02
  • javascript中的Promise怎么使用
    这篇“javascript中的Promise怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“javascript中的P...
    99+
    2023-06-30
  • ES6新特性中promise对象的用法
    这篇文章主要介绍了ES6新特性中promise对象的用法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. promise 介绍它是一个对象...
    99+
    2024-04-02
  • es6中promise对象的状态是什么
    这篇文章主要介绍“es6中promise对象的状态是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es6中promise对象的状态是什么”文章能帮助大家解决问题...
    99+
    2024-04-02
  • JavaScript的Promise函数怎么使用
    这篇文章主要介绍“JavaScript的Promise函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript的Promise函数怎么使用”文...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作