首页 > 其他分享 >Es6中promise的解释用法以及何为同步异步、回调函数和回调地狱?

Es6中promise的解释用法以及何为同步异步、回调函数和回调地狱?

时间:2024-06-15 20:29:09浏览次数:15  
标签:Es6 函数 异步 状态 promise Promise 回调

一.什么是回调函数?

        1. 含义

                ★ 回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在特定事件或条件发生时被调用执行

        2. 回调函数在编程中扮演着重要的角色,主要用于以下场景:

                ① 事件处理:在图形用户界面(GUI)或其他事件驱动的应用程序中,回调函数常用于处理用户交互和事件触发。

                ② 异步编程:在异步编程中,回调函数用于在任务完成时通知调用方,而不必等待任务的完成,从而提高应用程序的响应性。

                ③ 处理操作系统和框架的API:回调函数常用于处理各种操作系统和框架的API,以实现对特定事件或条件的响应。

                ④ 自定义扩展:通过回调函数,用户可以在库或框架中插入自定义代码,以满足其特定需求,提供更大的灵活性。

二. 什么是回调地狱?

        1. 含义

           ★ 回调地狱是指在异步编程中,由于多个回调函数嵌套调用,导致代码可读性差、维护困难的情况。这种情况常见于使用回调函数处理异步任务的编程模式中。在回调地狱中,当一个异步任务完成时,会触发一个回调函数,而这个回调函数可能又会触发下一个异步任务,并且这种嵌套的结构可能一直延续下去。这样的代码结构会导致代码嵌套层级过深,使得代码可读性差,难以维护和调试。

        2. 解决方法

             ★ 为了解决回调地狱问题,可以使用一些技术手段,如Promise、async/await等。Promise可以将回调函数的嵌套改为链式调用,提高代码的可读性。而async/await则是基于Promise的一种语法糖,可以更加简洁地处理异步任务。总的来说,回调地狱是异步编程中常见的问题,通过采用这些技术手段可以有效解决。

三. 什么是同步、异步?

        ☆ 在广义上,同步和异步是描述两个或多个事件、操作或进程之间的关系。

                ① 同步意味着事件、操作或进程是有序的,一个操作必须在另一个操作完成后开始执行,也就是等待上一同步任务执行完毕,才执行下一个同步任务;
                ② 异步则意味着事件、操作或进程是独立的,可以在不等待其他操作完成的情况下开始执行,也就是等待所有同步任务执行完毕,在执行异步任务。
        ★ 同步和异步的概念可以应用于各种计算场景,如并发编程、分布式系统、通信协议等。

四. promise的解释

        1. Promise是什么?

                ① Promise汉语意思为许诺、承诺,是es6新增的异步编程解决方案,在代码中表现为一个对象;② Promise是一个构造函数,是 JavaScript 中的一种异步编程模式,用于更好地处理异步操作(如异步请求(例如网络请求)、文件读写等)和避免回调地狱(Callback Hell);③ Promise 表示一个异步操作的最终完成或失败。

        2. Promise有三种状态,分别是:

                ① Pending(进行中) 初始状态

                ② Fulfilled (已成功) 意味着操作成功

                ③ rejected (已失败) 意味着操作失败

注意:① Promise对象的三种状态,不受外界的影响,只有promise中存放的将来会结束的事件才会影响。也就是只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态;② Promise状态一旦改变、是不可逆的,Pendding(进行中)状态可以转变为Fulfilled(已成功)状态,也可以转变为 rejected(已失败)状态,promise只有这两种情况发生状态改变,一旦发生这两种状态改变,那么状态就凝固了,会一直保持这个结果;③ Promise 进入已成功状态,将执行 then() 方法中的回调函数;当 Promise 进入已失败状态,将执行 catch() 方法中的回调函数。

        3. 链式调用

                ★ Promise 允许您将多个异步操作按顺序串联起来,以更清晰和可读的方式处理异步任务。

        4.错误处理

                ★ Promise 提供了 .catch() 方法,用于捕获异步操作中的错误,使错误处理更加方便。

        5.可等待性

                ★ Promise 允许您等待异步操作的完成,然后执行特定的回调函数。

五. 如何创建Promise对象?

        1. 可以理解为promise对象就是一个盒子,那么如何创建Promise盒子呢?

                ★ 在JavaScript中,你可以使用new Promise()构造函数来创建一个Promise对象。Promise对象用于处理异步操作,它允许你在将来的某个时刻传递异步操作的成功或失败结果。

★ 以下是创建Promise对象的基本语法(调用resolve()方法可以将promise对象转成成功状态,调用reject()方法可以将promise对象转成失败状态
):     

★ 下面是一个创建Promise对象的例子,该对象表示一个将在未来某个时刻完成的异步操作:

★ 在这个例子中,我们创建了一个Promise,它将在1秒钟后完成。如果操作成功,我们调用resolve,否则我们调用reject

        2. promise对象,提供了两个方法:

                ①  ☆ then(回调函数) --- 获取promise成功的状态结果
                      ☆ catch(回调函数) --- 捕获promise失败的状态结果

                ② 基本使用:

        3. 继续探讨then方法:then方法中可以继续return一个promise对象,然后返回值就是这个promise对象。

★ 示例代码:

        4. 继续探讨一下catch方法:一个链式操作中,不管哪一个环节出错,catch方法都可以捕获到,所以,只写一次就行了。 

        5. 并发请求 Promise.all();

                ① 语法:    
                            Promise.all([promise实例1,promise实例2...]).then().catch()。
                ② 执行特点:
                            只有三个promise实例的状态都确定为成功时,Promise.all的最终状态才是成功;只要有一个出现错误,Promise.all()的状态就会变成失败。

                ③ 如何避免一个错,Promise.all最终变成错误状态这个问题:
                    给每个请求实例写上单独的catch。

        6. Promise.race() 

                ★ 同时执行多个实例,哪个先确定状态,race方法就以哪个状态为主。

        7. Promise.allSettled([实例...]) 

                ★ 并发去执行多个实例,但是,就算有实例失败,也会进入到allSettled的成功方法中去(then)。


 



 

标签:Es6,函数,异步,状态,promise,Promise,回调
From: https://blog.csdn.net/HHR_hr/article/details/139703423

相关文章

  • 使用 Promise.withResolvers() 来简化你将函数 Promise 化的实现~~
    引言在JavaScript编程中,Promise是一种处理异步操作的常用机制。Promise对象代表了一个尚未完成但预期将来会完成的操作的结果。在本文中,我们将探讨如何通过使用ES2024的Promise.withResolversAPI来优化我们的Promise实现。现有实现的问题首先,让我们看一个简单的示例,展......
  • 封装一个Promise.all 的函数
    //1.准备三个异步函数constpromise1=Promise.resolve('prom11ise1');constpromise2=newPromise(function(resolve,reject){setTimeout(resolve,2000,'promise2');});constpromise3=newPromise(function(resolve......
  • 07C回调函数
    C零碎语法目录文章目录C零碎语法流程1.声明一个函数指针2.定义回调函数3.注册回调函数应用4.事件回调5.同步回调函数6.异步回调函数流程1.声明一个函数指针uint8_t(*p_CallbackFunc)(void);2.定义回调函数重要的是要注意回调函数只是一个函数。由于它的使......
  • 【Python Cookbook】S01E22 替换文本 re.sub(),re.subn() 以及 回调函数
    目录问题解决方案讨论问题如果我们想要对字符串中的文本做替换,该如何办?解决方案针对简单的文本模式,我们直接使用字符串内置方法str.replace()函数即可。text="Ileaveamessageforyou."print(text.replace('leave','left'))结果:Ileftamessagefor......
  • Promise对象
    Promise对象使用★Promise基本认识Promise是一个对象,用于表示异步操作的最终完成(或失败)及其结果值。它允许你关联处理程序,这些处理程序将在异步操作成功完成时或者失败时调用,从而避免了更复杂的嵌套回调(即回调地狱)。Promise对象通常用于执行异步操作,如网络请求、文件操作等......
  • tapPromise 函数 (绑定hooks方法)tapable 库,创建自定义插件的库
    tapPromise函数(绑定hooks方法)tapable库,创建自定义插件的库刚看到了一个插件的use函数//引入组件use(plugin:IPluginClass,options?:IPluginOption){if(this._checkPlugin(plugin)&&this.canvas){this._saveCustomAttr(plugin);constpluginRu......
  • validate方法进行表单异步校验时,回调函数内部避免使用全局变量
    对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个promise问题代码:save(){console.log(that.pos.indexName)console.log(that.pos.indexCode)......
  • SpringBoot+微信支付-JSAPI{微信支付回调}
    引入微信支付SDKMaven:com.github.wechatpay-apiv3:wechatpay-java-core:0.2.12Maven:com.github.wechatpay-apiv3:wechatpay-java:0.2.12响应微信回调的封装@Getter@Setter@NoArgsConstructor@AllArgsConstructor@Accessors(chain=true)publicclassWxNotifyVo{......
  • 【鸿蒙】---鸿蒙Next小课堂之Promise
    前言Promise是一种用于处理异步操作的对象,可以将异步操作转换为类似于同步操作的风格,以方便代码编写和维护。简而言之:Promise用来管理异步,方便编码。这时候该有人要问了,怎么区分异步和同步呢?同步代码:逐行执行,需原地等待结果后,才继续向下执行。异步代码:调用后耗时,不阻塞......
  • 线程池 + 回调 (进程赤用法类似)
    importosimportthreadingimporttimefromconcurrent.futuresimportThreadPoolExecutorfromfunctoolsimportwrapsThreadPool=ThreadPoolExecutor(max_workers=10)defthread_executor(a):print("Iamslave.Iamworking.Iamgoingtosleep3......