首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何深度理解JavaScript的回调函数

首先,回调函数这个概念,他是JS中的一个核心。 作为JS的核心,回调函数和异步执行是紧密相关的,也是必须跨过去的一道个门槛。 当然,我们这篇文字只谈回调,不说异步。 对象?...我们知道,JavaScript他不是一个面向对象语言,但是,我们的JavaScript是一个基于对象的脚本语言。...啥意思,也就是基本上,JavaScript里面的函数啊,变量啊,这些都是一个对象,当然这个概念不是像面向对象语言那样。 回调? 看这张图,是一个简单的回调函数,怎么回调了呢?...在一个函数里面,我们将另一个函数作为参数,并在函数体内部调用它。在 JavaScript 里,我们叫它 “回调” 。所以,被传递给另一个函数作为参数的函数叫作回调函数。 为什么需要回调函数?...回调函数确保:函数在某个任务完成之前不运行,在任务完成之后立即运行。它帮助我们编写异步 JavaScript 代码,避免问题和错误。

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    传统的回调函数与 ES6中的promise回调以及 ES7 的asyncawait终极的异步同步化

    目录 传统的回调函数封装 ES6中的promise 异步同步化(终极) ---- 传统的回调函数封装 js中的回调函数的理解:回调函数就是传递一个参数化函数,就是将这个函数作为一个参数传到另外一个主函数里面...,当那个主函数执行完之后,再执行传递过去的函数,走这个过程的参数化的函数,就叫回调函数,换个说法也就是被作为参数传递到另一个函数(主函数)的那个函数就叫做回调函数。...ES6中的promise Promise特点 仅只有3种状态:进行中,已成功,已失败,且只有异步结果可以影响状态,其它都不能影响。...promise.then(successCb, faildCd) 接收两个函数作为参数,来处理上一个promise 对象的结果。then f 方法返回的是 promise 对象。...第一种链式写法,使用catch,相当于给前面一个then方法返回的promise 注册回调,可以捕获到前面then没有被处理的异常。第二种是回调函数写法,仅为为上一个promise 注册异常回调。

    1.1K20

    VFP的过程或函数如何接收数组参数或返回一数组结果?

    一、给过程或函数传递一个数组参数。 LOCAL ARRAYabc[5] abc[1]="A" abc[2]="B" abc[3]="C" abc[4]="D" abc[5]="E" CLEAR ?...sendarr(@abc) Function sendarr Lparameters ltarray_b RETURN ltarray_b[3] Endfun 这里的传值,我们注意一个@,这个小老鼠...数据传值,使用的是地址引用传值。 二、过程或函数传递返回一个数组。 LOCAL ARRAY abc[5] abc=returnarr() ?abc[1] ?abc[2] ?abc[3] ?...三、过程或函数传递返回几个数组。 LOCAL ARRAY a[5] LOCAL ARRAY b[3] returnarr_more(@a,@b) ?a[1] ?a[2] ?a[3] ?b[1] ?...ENDFUNC 上面的代码,其实是引用址传递,过程或函数直接改变传递参数的值,而已。所以我们也可以看到有些函数的参数,有一个是返回值参数。就是上面的用法。 好了。总结这些,为狐友们参考!

    3.3K30

    「一次写过瘾」手写Promise全家桶+Generator+asyncawait

    3.x 是对象或函数 取出 x.then 并调用,调用时将 this 指向 x。将 then 回调函数中得到的结果 y 传入新的 Promise 解决过程中,递归调用。...'rejected'; 2.我们再来搞定 Promise 的构造函数 创建 Promise 时需要传入 execute 回调函数,接收两个参数,这两个参数分别用来兑现和拒绝当前 Promise。...根据第 4 条、第 5 条规则,需要根据 Promise 的状态来执行对应的回调函数。 在 PENDING 状态时,需要等到状态落定才能调用。...指向 x,将 then 回调函数中得到的结果 y 传入新的 Promise 解决过程中,递归调用。...Promise.prototype.finally() 方法用于给 Promise 添加一个不管最终状态如何都会执行的操作。

    97020

    ES6中的Promise深入学习

    都有可能,正常情况下是先指定回调函数再改变状态,但也可以先改变状态再指定回调函数 (2)如何先改状态再指定回调?...(1)简单表达:由then()指定的回调函数执行的结果或返回的结果决定 (2)详细表达: 如果抛出异常,新promise变为rejected,error值为抛出的异常 如果返回的是非promise的任意值...(没有异常),新promise变为resolved,value为返回的值 如果返回的是另一个新promise,此promise的结果就会成为新promise 的结果 06- promise如何串联多个(...:" + value); }) //执行任务1(异步) //任务1的结果:1 //执行任务2(同步) //任务2的结果:2 //执行任务3(异步) //任务3的结果:3 07-如何中断promise...如何在使用promise的then链式调用的时候。在中间中断?不再调用后面的回调函数?

    1.2K30

    Promise如何修改对象的状态

    它接收一个参数作为Promise对象的结果值,并在调用后将该值传递给通过then方法注册的回调函数。...在调用resolve函数时,我们传递了一个字符串作为结果值。然后,我们通过then方法注册了一个回调函数,当Promise对象状态变为fulfilled时,该回调函数会被执行并输出结果值。2....示例代码下面是一个完整的示例代码,演示了如何使用resolve和reject函数来修改Promise对象的状态:function performAsyncTask() { return new Promise...我们创建了一个Promise对象,并通过then和catch方法注册了相应的回调函数,以处理Promise对象的结果或错误。...当Promise对象状态为fulfilled时,then方法注册的回调函数会被执行并接收结果值作为参数;当Promise对象状态为rejected时,catch方法注册的回调函数会被执行并接收错误原因作为参数

    91930

    JS高阶(一)Promise

    抽象表达: Promise是ES6中新增的规范; Promise是js中异步编程的新解决方案(旧方案采用函数回调); 具体表达: 从语法上说:Promise是一个构造函数; 从功能上说:Promise...解决回调地狱问题 回调地狱:回调函数嵌套调用,外部回调函数异步执行的结果是嵌套回调执行的条件; 回调地域缺点:不便于阅读,不便于异常处理; 解决方案:promise链式调用; 5.2.1 对象状态改变...p3]); console.log(result); //return p1 result Promise内的关键问题 如何改变 promise 的状态?...都有可能:正常情况下先指定回调函数后再改变状态,但也可以先改变状态再指定回调; 如何先改变状态再指定回调?...简单表达:由then指定的回调函数执行的结果决定; 详细表达: 如果抛出异常,新的 promise 变为 rejected,reason 为抛出的异常; 如果返回任意非 promise 值,新 promise

    2.4K10

    Javascript中的异步编程

    然而真实的输出结果却是这样的: Start... End... in progress 原因在于setTimeout中的第一个参数,箭头函数(即上文所说的回调函数)是异步执行的。...当后面的异步操作依赖于前面异步操作的结果时,就需要在回调函数中嵌套回调函数,例如: console.log("Start..."); setTimeout(()=>{ console.log('A'...Promise解决回调地狱问题的核心思想是: 将异步操作的定义和对结果的处理分开来写 对结果的处理可以串联 有点抽象,我们来看一个具体的例子。...需要注意的是,要想将两个Promise串联起来的前提是,第一个Promise的处理函数必须返回一个Promise,如例子中的return waitTenSeconds; 除了解决回调地狱的问题,将异步操作定义和结果处理分开之后...无论技术如何发展,如何变化,但万变不离其宗,基本原理始终未变。 阅读原文

    91200

    从 Promise 对象讲解事件循环机制

    Promise Promise简介 Promise 是异步编程的一种解决方案,比传统的解决方案 (回调函数和事件)更合理和更强大。...Promise的回调函数也只能拿到前面状态凝固的结果 Promise缺点: 1 无法取消Promise,一旦新建它就会立即执行,无法中途取消 2 如果不设置回调函数(没有捕获错误),Promise...02 Promise.prototype.then() Promise实例确定后,可以用then方法分别指定fulfilled状态和rejected状态的回调函数。它的基本用法如下: ?...它返回的是一个新的Promise对象。 03 Promise.prototype.catch() catch方法是.then(null,onrejected)的别名,用于指定发生错误时的回调函数。...状态,此时第一个被reject的实例的返回值,会传递给Promise.all的回调函数: ?

    1.9K30

    C++ 异步编程脉络与示例

    早期的回调方法 回调函数的基本概念 回调函数(Callback Function)是指将一个函数指针或函数对象作为参数传递给另一个函数,在异步操作完成后调用该回调函数处理结果。...示例代码 以下是一个简单的示例,展示了如何使用回调函数进行异步操作: #include #include #include // 异步操作函数...关键特性 std::future:用于表示异步操作的结果,可以通过 get() 方法获取结果。 std::promise:用于设置异步操作的结果,可以与 std::future 关联。...std::promise 用于设置异步操作的结果,而 std::future 用于获取这个结果。...写在最后 C++ 异步编程经历了从回调函数到 std::future 和 std::promise,再到现代协程的演变。

    22010

    promise知识盲区整理

    的reslove和reject函数对象 promise的all方法 promise的race方法 Promise关键问题 如何修改对象状态 promise指定多个成功和失败回调函数,都会执行吗?...promise.then()返回的新promise的结果状态由回调函数的返回值决定 then没有返回值 在then回调函数中抛出异常 返回值是字符串,null等 返回值是一个promise对象 串联多个任务...---- Promise关键问题 如何修改对象状态 ---- promise指定多个成功和失败回调函数,都会执行吗?...// //设置当前then的回调函数返回的promise对象状态为成功, // //结果为成功回调函数的执行结果 // reslove(ret); // }...对象 // //判断成功回调函数返回的promise的状态值和结果 // //这里直接调用成功回调函数返回的promise对象的回调函数 // //如果返回的

    63510

    浅析Promise用法

    浅析Promise用法 要理解Promise要知道没有Promise的回调地狱 如何插入一段漂亮的代码片 Promise语法与then的用法 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件...(通常是一个异步操作)的结果。...只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。...这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。 有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。...---- 要理解Promise要知道没有Promise的回调地狱 一般我们要在一个函数执行完之后执行另一个函数我们称之为callback‘回调’,简单的写一下 如何插入一段漂亮的代码片 去博客设置页面,

    37410

    Promise解决回调嵌套问题及终极解决方案async 和 await

    一、Promise 1.异步函数 与 回调函数的说明 回调函数: 把一个函数当成参数传递, 将来特定的时机调用, 这个函数就叫回调函数 什么时候会用到回调函数, 异步的时候 延时器 setTimeout...: 回调函数的阅读性不好, 回调不会立马执行 回调函数如果大量的嵌套, 可维护性差 (回调地狱) promise 就是为了解决回调函数嵌套的问题而存在的 2.promise 的基本语法 目的: promise...是书写异步代码的另一种方式, 解决回调函数嵌套的问题 1.如何创建一个 promise 对象 const p = new Promise((resolve, reject) => { //两个参数...b, c 三个文件 回调地狱: 回调函数嵌套回调函数, 嵌套多了, 将来就很难维护, 很难理清顺序 promise 解决回调地狱的问题优化 : 将读取文件创建promise的过程封装起来,将来一调用函数...) 3.await用于等待一个成功的结果,只能用在async函数中 4.await后面一般会跟一个promise对象,await会阻塞async函数的执行,直到等到promise成功的结果(resolve

    2.3K20
    领券