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

JavaScript 权威指南第七版(GPT 重译)(五)

¹ 这里定义的getCurrentVersionNumber()函数(我们可以想象它被假设的checkForUpdates()函数使用,我们§13.1.1 讨论过)发出 HTTP 请求,并定义收到服务器响应或超时或其他错误导致请求失败将被调用的事件处理程序...当getJSON()返回,回调函数异步调用,因此它也是异步的,不能有意义地抛出异常(因为没有代码调用堆栈上处理它)。...,忽略传递给方法的参数: fetch().then().then() 当在一个表达式调用多个方法,我们称之为方法。...首先,请注意,使用常规的同步 throw 语句抛出的错误对象最终会在 Promise 的 .catch() 方法调用异步处理。...此外,Promises 允许你将错误处理代码集中到一条catch()调用,放在then()调用的末尾。

16910

web前端面试题及答案2023_2023-03-15

实例函数的情况有些特别,主要是父组件通过 React 的 ref API 获取子组件的实例,然后是通过实例调用子组件的实例函数。...用 `keep-alive` 包裹的组件切换不会进行销毁,而是缓存到内存并执行 `deactivated` 钩子函数,命中缓存渲染后会执行 `activated` 钩子函数。...JS 执行的过程中会产生执行环境,这些执行环境会被顺序的加入到执行栈。如果遇到异步的代码,会被挂起并加入到 Task(有多种 task) 队列。...方法1:当页面的元素数小于x,则认为页面白屏。比如“没有任何内容”,可以获取页面的DOM节点数,判断DOM节点数少于某个阈值X,则认为白屏。 方法2:当页面出现业务定义的错误码,则认为是白屏。...方法3:当页面出现业务定义的特征值,则认为是白屏。比如“数据加载”。

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

Promise机制

Promises 不是一种解决具体问题的算法,而已一种更好的代码组织模式。接受新的组织模式同时,也逐渐以全新的视角来理解异步调用。...promise 如果 x 处于拒绝态,用相同的据因拒绝 promise x 为对象或函数 如果 x 为对象或者函数: 把 x.then 赋值给 then 如果取 x.then 的值抛出错误 e ,...的对象解决,而 [[Resolve]](promise, thenable) 的递归性质又使得其被再次调用,根据上述的算法将会陷入无限递归之中。...(rejected){ //当 promise 状态变成 rejected 调用函数 },function(progress){ //当返回进度信息调用函数...此外, Promises/A 规范,由 then 方法生成的 Promise 对象是已执行还是已拒绝,取决于由 then 方法调用的那个回调是返回值还是抛出错误。

1.4K100

Promises机制

Promises 不是一种解决具体问题的算法,而已一种更好的代码组织模式。接受新的组织模式同时,也逐渐以全新的视角来理解异步调用。...promise 如果 x 处于拒绝态,用相同的据因拒绝 promise x 为对象或函数 如果 x 为对象或者函数: 把 x.then 赋值给 then 如果取 x.then 的值抛出错误 e ,则以...的对象解决,而 [[Resolve]](promise, thenable) 的递归性质又使得其被再次调用,根据上述的算法将会陷入无限递归之中。...(rejected){ //当 promise 状态变成 rejected 调用函数 },function(progress){ //当返回进度信息调用函数...此外, Promises/A 规范,由 then 方法生成的 Promise 对象是已执行还是已拒绝,取决于由 then 方法调用的那个回调是返回值还是抛出错误。

71640

Promise机制详解

Promises 不是一种解决具体问题的算法,而已一种更好的代码组织模式。接受新的组织模式同时,也逐渐以全新的视角来理解异步调用。...如果 x 处于拒绝态,用相同的据因拒绝 promise x 为对象或函数 如果 x 为对象或者函数: 把 x.then 赋值给 then 如果取 x.then 的值抛出错误 e ,则以 e 为据因拒绝...如果 then 不是函数,以 x 为参数执行 promise 如果 x 不为对象或者函数,以 x 为参数执行 promise 如果一个 promise 被一个循环的 thenable 的对象解决,...(rejected){ //当 promise 状态变成 rejected 调用函数 },function(progress){ //当返回进度信息调用函数...此外, Promises/A 规范,由 then 方法生成的 Promise 对象是已执行还是已拒绝,取决于由 then 方法调用的那个回调是返回值还是抛出错误。

1.5K70

按照 PromiseA+ 手写Promise,通过promises-aplus-tests的全部872个测试用例

// 插件promises-aplus-tests的用例,也有检索属性x.then的时候直接抛出异常的情况, // 所以,这里的检索then属性,必须写在try的内部,才能捕获异常。...js基础值,且未决议,则直接决议 /** * Promises/A+: * 2.3.3.4 如果then不是一个函数,则用x完成promise; * 2.3.4 如果...从大的方面来说,then方法主要做了 2 件事: 处理 onFulfilled 或者 onRejected 不是函数的情况; 创建并返回一个新的 promise 实例; 2.1 利用包装函数将 onFulfilled...处理onFulfilled或者onRejected不是函数的情况 // Promises/A+:2.2.1 onFulfilled 和 onRejected都是可选的,如果他们不是函数,就会被忽略。...都必须作为函数调用(采用默认调用方式,而非call、apply或者属性的方式) let x = onFulfilled(this.value); // Promises

92530

手写系列-这一次,彻底搞懂 Promise

改动点如下: then 方法需要返回 MyPromise 实例; then 内部调用回调,需通过 resolvePromise 方法判断返回值 x 的类型来处理返回值。...如果 x函数或对象 如果 x.then 是函数 执行 x.then 如果 x.then 不是函数 执行 resolve(x) 如果 x 不是函数或对象 执行 resolve(x) 代码如下: function...异步事件 Promises/A+ 规范 要求 onFulfilled、onRejected 执行上下文堆栈之前不得调用。也就是3.1.1标明要注意的点。...// 原因: new promise ,promise2 还没有完成初始化,所以 resolvePromise 不能访问到 promise2 // 在当前的执行上下文栈...Promise 通过对异步任务执行状态的处理,让我们可以 Promise.then 获取任务结果,让代码更加清晰优雅。

27730

手写系列-这一次,彻底搞懂 Promise

改动点如下: then 方法需要返回 MyPromise 实例; then 内部调用回调,需通过 resolvePromise 方法判断返回值 x 的类型来处理返回值。...如果 x函数或对象 如果 x.then 是函数 执行 x.then 如果 x.then 不是函数 执行 resolve(x) 如果 x 不是函数或对象 执行 resolve(x) 代码如下: function...异步事件 Promises/A+ 规范 要求 onFulfilled、onRejected 执行上下文堆栈之前不得调用。也就是3.1.1标明要注意的点。...// 原因: new promise ,promise2 还没有完成初始化,所以 resolvePromise 不能访问到 promise2 // 在当前的执行上下文栈...Promise 通过对异步任务执行状态的处理,让我们可以 Promise.then 获取任务结果,让代码更加清晰优雅。

17730

前端二面手写面试题总结

,但注册到了不同的 callbacks 数组,因为每次 then 都返回新的 promise 实例(参考上面的例子和图)注册完成后开始执行构造函数异步事件,异步完成之后依次调用 callbacks...reject) } })}手写 instanceof 方法instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型的任何位置。...参数三:异步 xhr.onreadystatechange = () => { //每当 readyState 属性改变,就会调用函数。...有两种思路:通过函数的 length 属性,获取函数的形参个数,形参的个数就是所需的参数个数调用柯里化工具函数,手动指定所需的参数个数将这两点结合一下,实现一个简单 curry 函数通用版// 写法...undefined、任意函数以及symbol,会被忽略(出现在非数组对象的属性值),或者被转换成 null(出现在数组)。

78520

一次就想搞懂这个Promise

resole() // 例如new Promise(resolve=>resolve('test'));这样,实际上promise已经是成功状态,只是等then方法调用了...用创建promise的函数里面可能有个异步函数异步函数resolve的,也可能用户根本 没想resolve() // 发布订阅,将回调存好,他总会resolve...用创建promise的函数里面可能有个异步函数异步函数resolve的,也可能用户根本 没想resolve() // 发布订阅,将回调存好,他总会resolve...(promises) { let arr = []; // 这个i是独立的,当他等于promises.length,是说明所有的异步都完成了...用创建promise的函数里面可能有个异步函数异步函数resolve的,也可能用户根本 没想resolve() // 发布订阅,将回调存好,他总会resolve

60130

滴滴前端高频面试题

状态的改变是通过 resolve() 和 reject() 函数来实现的,可以异步操作结束后调用这两个函数改变 Promise 实例的状态,它的原型上定义了一个 then 方法,使用这个 then 方法可以为两个状态的改变注册回调函数...注意: 构造 Promise 的时候,构造函数内部的代码是立即执行的对原型、原型的理解JavaScript是使用构造函数来新建一个对象的,每一个构造函数的内部都有一个 prototype 属性,...偏函数就是将一个 n 参的函数转换成固定 x 参的函数,剩余参数(n - x)将在下次调用全部传入。..., bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。...方法1:当页面的元素数小于x,则认为页面白屏。比如“没有任何内容”,可以获取页面的DOM节点数,判断DOM节点数少于某个阈值X,则认为白屏。 方法2:当页面出现业务定义的错误码,则认为是白屏。

1.1K20

前端一面必会手写面试题指南

数组去重实现的基本原理如下:① 初始化一个空数组② 将需要去重处理的数组的第1项初始化数组查找,如果找不到(空数组中肯定找不到),就将该项添加到初始化数组③ 将需要去重处理的数组的第2项初始化数组查找...instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型的任何位置。...在这个对象上使用 open 方法创建一个 HTTP 请求,open 方法所需要的参数是请求的方法、请求的地址、是否异步和用户的认证信息。发起请求前,可以为这个对象添加一些信息和监听函数。...这个时候就可以通过 response 的数据来对页面进行更新了。当对象的属性和监听函数设置完成后,最后调用 sent 方法来向服务器发起请求,可以传入参数作为发送的数据体。...call 函数的实现步骤:判断调用对象是否为函数,即使我们是定义函数的原型上的,但是可能出现使用 call 等方式调用的情况。

65540

一步一步手写完美符合PromiseA+规范的Promise

Promise作为构造函数,会将一个函数作为它的参数传入 并且Promise是一个含有 then方法函数 基于此,先写一个最基本的 const PENDING = "pending"; const...调用.then,状态已经不再是pending,则直接调用 onFulfilledCallback 或者 onRejectedCallback即可; 当fn是异步执行resolve或者reject,...reject 是因为当我们then方法的onRejected 接收到了上一个错误,说明我们对预期的错误进行了处理,进行下一层传递应该执行下一个then的onFulfilled,除非在执行本次resolve...所以我们需要对此进行递归调用; 6. x 是一个 thenable 首先,Promise规范给出的的 thenable定义 'thenable' 是一个定义then方法的对象或者函数 我们先来举几个栗子...onFulfilled2因为执行第一个onFulfilled后返回了一个thenable,该thenable异步执行 onFulfilled,所以当前PromiseZ的状态依旧处于 pending

41230

20道前端高频面试题(附答案)_2023-02-27

实例,该方法接受一个由Promise对象组成的数组作为参数(Promise.all()方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例),注意参数只要有一个实例触发...catch方法,都会触发Promise.all()方法返回的新的实例的catch方法,如果参数的某个实例本身调用了catch方法,将不会触发Promise.all()方法返回的新实例的catch方法...需要注意的是,立即resolve()的 Promise 对象,是本轮“事件循环”(event loop)的结束执行,而不是在下一轮“事件循环”的开始。...); } // 实践要确保 onFulfilled 和 onRejected ⽅方法异步执⾏行行,且应该在 then ⽅方法被调⽤用的那⼀一轮事件循环之后的新执⾏行行栈执⾏行行。...方法不管Promise对象最后的状态如何都会执行 .finally()方法的回调函数不接受任何的参数,也就是说你.finally()函数是无法知道Promise最终的状态是resolved还是rejected

86920

前端常见面试题总结_2023-02-23

但这还不是问题的关键,模板字符串的关键优势有两个: 模板字符串,空格、缩进、换行都会被保留 模板字符串完全支持“运算”式的表达式,可以${}里完成一些计算 基于第一点,可以模板字符串里无障碍地直接写...super,没有 arguments,没有 new.target 不能通过 new 关键字调用 一个函数内部有两个方法:[Call] 和 [Construct],通过 new 进行函数调用时,会执行...因为 JSON 的语法是基于 js 的,因此很容易将 JSON 和 js 的对象弄混,但是应该注意的是 JSON 和 js 的对象不是一回事,JSON 对象格式更加严格,比如说 JSON 属性值不能为函数...当从后端接收到 JSON 格式的字符串,可以通过这个方法来将其解析为一个 js 数据结构,以此来进行数据的访问。...尾调用指的是函数的最后一步调用另一个函数。代码执行是基于执行栈的,所以当在一个函数调用另一个函数,会保留当前的执行上下文,然后再新建另外一个执行上下文加入栈

73410

腾讯前端二面面试题(附答案)

相比,不返回报文主体部分;OPTIONS:询问支持的请求方法,用来跨域请求;CONNECT:要求与代理服务器通信建立隧道,使用隧道进行TCP通信;TRACE: 回显服务器收到的请求,主要⽤于测试或诊断...偏函数就是将一个 n 参的函数转换成固定 x 参的函数,剩余参数(n - x)将在下次调用全部传入。..., bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。...= eval("(" + json + ")"); // obj 就是 json 反序列化之后得到的对象但是直接调用 eval 会存在安全问题,如果数据可能不是 json 数据,而是可执行的 JavaScript...第一种方式,使用 instanceof 运算符来判断构造函数的 prototype 属性是否出现在对象的原型的任何位置。

1K30

Promise实现原理

解决异步实现 现在基本可以实现简单的同步代码,但是当resolvesetTomeout内执行,thenstate还是pending等待状态 我们就需要在then调用的时候,将成功和失败存到各自的数组...返回的值传递到下一个then 如果返回一个普通的值,则将普通的值传递给下一个then 2、当我们第一个thenreturn了一个参数(参数未知,需判断)。...判断x函数叫做resolvePromise 首先,要看x不是promise。...TypeError('Chaining cycle detected for promise')); } // 防止多次调用 let called; // x不是null 且x是对象或者函数...; } } 解决其他问题 1、秘籍规定onFulfilled,onRejected都是可选参数,如果他们不是函数,必须被忽略 onFulfilled返回一个普通的值,成功直接等于 value =>

1.1K20

带你写出符合PromiseA+规范Promise的源码

resolvePromise 的函数,为何需要usedd这个flag,同样是因为规范明确表示: If both resolvePromise and rejectPromise are called...promise变成 fulfilled 调用 onFulfilled,参数是promise的value 2.2.2.2 promise的状态不是 fulfilled 之前,不能调用 2.2.2.3...onFulfilled 只能被调用一次 2.2.3 如果 onRejected 是函数: 2.2.3.1 必须在promise变成 rejected 调用 onRejected,参数是promise...的reason 2.2.3.2 promise的状态不是 rejected 之前,不能调用 2.2.3.3 onRejected 只能被调用一次 2.2.4 onFulfilled 和 onRejected...如果传入的参数不包含任何 promise,则返回一个异步完成. promises 中所有的promise都promise都“完成”时或参数不包含 promise 回调完成。

84320

你没有抓住 Promises 的要点

当 promise 对象改变状态(这超出了这篇短小文档讨论的范围),回调函数会被执行,我觉得这很有用。 但是人们不怎么理解的第二段,恰恰是最重要的。 那么 Promises 的要点是啥?...最重要的是,promises 根本就不是简单的回调函数聚合。promises不是那么简单的东西,它是一种为同步函数异步函数提供直接一致性的模式。 啥意思呢?...现在,如果中间出现失败的情况,那个函数会抛出异常,异常会向上传播,直到有人可以来处理它为止。 异步编程的世界里,你没法“ 返回” 一个值了,它没法被及时地读取到。...promises 现在需要给我们异步世界里的函数组成和错误冒泡机制。...rejection 部分的代码就像同步代码的副本一样,整个调用,fulfillment 部分会执行,也会在某个时候被 rejection 中断,但是只有预先声明了的 handler 才能处理它。

60310

JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 asyncawait 更好地编码方式!

发布的第一篇文章,思考了这样一个问题:当调用堆栈中有函数调用需要花费大量时间来处理时会发生什么? 例如,假设在浏览器运行一个复杂的图像转换算法。...ES6引入了一个名为“任务队列”的概念。它是事件循环队列上的一个层。最为常见Promises 处理的异步方式。...因此,我们sum(...)末尾调用then(...)方法  —  实际上是返回的第二个 Pwwromise 上运行,而不是由Promise.all([ ... ])创建 Promise。...此外,虽然没有第二个 Promise 结束调用 then方法 ,其时这里也创建一个 Promise。...AsyncFunction 对象表示该函数包含的代码的异步函数调用使用 async 声明函数,它返回一个 Promise。

3.1K20
领券