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

重学JavaScript Promise API

在实际场景,我们可能会进行Ajax调用,用结果更新DOM,然后等待动画完成。或者,我们的服务器可能从客户端接收输入,验证输入,更新数据库,写入日志文件,最后发送响应。...我们可以这两个方法传递值,这些值将在消费代码可用。 要了解这在实践是如何工作的,请参考下面的代码。...then方法 当我们实例化一个Promise对象,我们将得到一个未来可用数据的代理。在我们的例子,我们期待从远程服务返回一些数据。那么,我们如何知道数据何时可用呢?...让我们重温一下 setTimeout 示例,以了解Promise链式调用的基本工作原理。...向下传递数据 当我们需要执行多个异步操作,我们可能希望将一个异步调用的结果传递给Promise的下一个then,这样我们就可以对该数据进行处理。

14220

现代JavaScript—ES6+的Imports,Exports,Let,Const和Promise

,不过可以在另一个重新声明。...当我们将一个变量声明为let,我们不能在同一作用域(函数或块级作用域)重新定义或重新声明另一个具有相同名称的let变量,但是我们可以重新赋值。...当我们将一个变量声明为const,我们不能在同一作用域(函数或块级作用域)重新定义或重新声明具有相同名称的另一个const变量。...当我们创建Promise,它处于等待的状态。当我们调用resolve函数,它将进入已完成状态。如果调用reject,他将进入被拒绝状态。...链式操作 我们可以单个promise添加多个then方法,如下所示: promise.then(function(result) { console.log('first .then handler

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

盘点JavaScriptPromise 链的高级用法

之所以这么运行,是因为对 promise.then 的调用会返回了一个 promise,所以可以在其之上调用下一个 .then。...let promise = fetch(url); 执行这条语句, url 发出网络请求并返回一个 promise。...下面这段代码 user.json 发送请求,并从服务器加载该文本: fetch('/article/promise-chaining/user.json') // 当远程服务器响应时,下面的 .then...这段代码可以工作,具体细节请看注释。但是,这儿有一个潜在的问题,一个新手使用 promise 的典型问题。 请看 (*) 行:如何能在头像显示结束并被移除 之后 做点什么?...链的下一个 .then 将一直等待这一刻的到来。 作为一个好的做法,异步行为应该始终返回一个 promise。这样就可以使得之后计划后续的行为成为可能。

1.1K20

用了这么久axios,你知道它是如何封装 HTTP 请求的吗?

当请求或响应失败,我们还能指定对应的错误处理函数。 撤销 HTTP 请求 在开发与搜索相关的模块,我们经常要频繁地发送数据查询请求。一般来说,当我发送下一个请求,需要撤销上个请求。...= promise.then(chain.shift(), chain.shift()); } return promise;}; 这个函数是 axios 发送请求的接口。...添加 undefined 的原因是需要给 Promise 提供成功和失败的回调函数,从下面代码里的 promise = promise.then(chain.shift(), chain.shift()...因此,它不仅确保了两个模块之间的低耦合,而且还为将来的用户提供了定制请求发送模块的空间。...它不仅确保了内部逻辑的一致性,而且还确保了在需要撤销请求,不需要直接更改相关类的样例数据,以避免在很大程度上入侵其他模块。 总结 本文详细介绍了 axios 的用法、设计思想和实现方法。

1.3K40

axios 是如何封装 HTTP 请求的

当请求或响应失败,我们还能指定对应的错误处理函数。 撤销 HTTP 请求 在开发与搜索相关的模块,我们经常要频繁地发送数据查询请求。一般来说,当我发送下一个请求,需要撤销上个请求。...= promise.then(chain.shift(), chain.shift()); } return promise; }; 复制代码 这个函数是 axios 发送请求的接口...添加 undefined 的原因是需要给 Promise 提供成功和失败的回调函数,从下面代码里的 promise = promise.then(chain.shift(), chain.shift()...因此,它不仅确保了两个模块之间的低耦合,而且还为将来的用户提供了定制请求发送模块的空间。...它不仅确保了内部逻辑的一致性,而且还确保了在需要撤销请求,不需要直接更改相关类的样例数据,以避免在很大程度上入侵其他模块。 总结 本文详细介绍了 axios 的用法、设计思想和实现方法。

1.9K50

axios 是如何封装 HTTP 请求的

当请求或响应失败,我们还能指定对应的错误处理函数。 撤销 HTTP 请求 在开发与搜索相关的模块,我们经常要频繁地发送数据查询请求。一般来说,当我发送下一个请求,需要撤销上个请求。...= promise.then(chain.shift(), chain.shift()); } return promise; }; 这个函数是 axios 发送请求的接口。...添加 undefined 的原因是需要给 Promise 提供成功和失败的回调函数,从下面代码里的 promise = promise.then(chain.shift(), chain.shift()...因此,它不仅确保了两个模块之间的低耦合,而且还为将来的用户提供了定制请求发送模块的空间。...它不仅确保了内部逻辑的一致性,而且还确保了在需要撤销请求,不需要直接更改相关类的样例数据,以避免在很大程度上入侵其他模块。

1K20

axios 是如何封装 HTTP 请求的

当请求或响应失败,我们还能指定对应的错误处理函数。 撤销 HTTP 请求 在开发与搜索相关的模块,我们经常要频繁地发送数据查询请求。一般来说,当我发送下一个请求,需要撤销上个请求。...= promise.then(chain.shift(), chain.shift()); } return promise; }; 复制代码 这个函数是 axios 发送请求的接口...添加 undefined 的原因是需要给 Promise 提供成功和失败的回调函数,从下面代码里的 promise = promise.then(chain.shift(), chain.shift()...因此,它不仅确保了两个模块之间的低耦合,而且还为将来的用户提供了定制请求发送模块的空间。...它不仅确保了内部逻辑的一致性,而且还确保了在需要撤销请求,不需要直接更改相关类的样例数据,以避免在很大程度上入侵其他模块。 总结 本文详细介绍了 axios 的用法、设计思想和实现方法。

1.8K30

每天3分钟,重学ES6-ES12(九)Promise简单介绍

; 那么这里我从一个实际的例子来作为切入点: 我们调用一个函数,这个函数中发送网络请求(我们可以用定时器来模拟); 如果发送网络请求成功了,那么告知调用者发送成功,并且将相关数据返回过去; 如果发送网络请求失败了...承诺、许诺 、期约; 当我们需要给予调用者一个承诺:待会儿我会给你回调数据,就可以创建一个Promise的对象; 在通过new创建Promise对象,我们需要传入一个回调函数,我们称之为executor...; 这个回调函数会被立即执行,并且给传入另外两个回调函数resolve、reject; 当我们调用resolve回调函数,会执行Promise对象的then方法传入的回调函数; 当我们调用reject...): 初始状态,既没有被兑现,也没有被拒绝; 当执行executor的代码,处于该状态; 已兑现(fulfilled): 意味着操作成功完成; 执行了resolve,处于该状态; 已拒绝(...// resolve() reject() }) promise.then(() => { }) promise.catch(() => { }) Promise重构请求 那么有了Promise

20910

使用 Swift 实现 Promise

当我们运行 Playground,编译器会报错: error: Promise.playground:41:9: error: use of unresolved identifier 'Promise...现在我们需要在Promise的实现定义一个状态,其默认值为.pending。我们还需要一个私有函数,它能在当前还处于.pending状态更新状态。...一个是then方法,如果 promise 已经在调用then被解决。另一个在updateState方法,因为那是 promise 更新其内部状态从.pending到.resolved的地方。...但当我们第二次调用thenpromise 还是没有被解决,依然处于.pending状态,于是,我们将回调擦除换成了新的。只有第二个回调会在将来被执行,第一个被忘记了。...它的目的是消费 promise 被解决后的 value,但它不返回什么。这意味着我们暂时没法串联多个 promise

1.2K20

关于Promise解决的问题你还得知道

} }) } }) }) 可是回调函数的层级嵌套太深,显得有点麻烦,一直回调==回调地狱 为了解决问题在Es6产生了一个新特性...答:解决了原来异步编程的地狱回调 这个答案太普遍了,它不仅解决了地狱回调,而且使指定回调函数的方式更加灵活 先来看一个例子 如下伪代码 //成功回调 function successCallback(res...就解决了这一点 const promise = DownloadAudioAsync(music);//返回promise对象 //第一种 异步任务成功或者失败之前指定回调 promise.then(successCallback...,failureCallback) //第二种 异步任务有结果之后指定回调假定异步任务执行花费2秒 setTimeout(()=>{ promise.then(successCallback,...failureCallback) },3000) 当我们new 一个Promise对象,此时异步任务已经启动执行 可是在异步任务启动我们根本没有指定回调函数,而是分别在异步任务启动后指定回调函数(此时是在异步任务成功或者失败之前指定的回调函数

38410

【译】JavaScript的Promises

在JavaScriptpromise工作方式和现实生活的承诺一样。...当我们稍后一起构建jeffBuysCake,你将能够自己证明此console.log语句。 在与Jeff交谈之后,你开始计划下一步。...你需要在客户购买东西向他收费,然后将他们的信息输入到你的数据库。最后,你将向他们发送电子邮件: 客户收费 将客户信息输入到数据库 发送电子邮件给客户 让我们一步一步地解决。...如果数据库操作成功,则会客户发送电子邮件。否则,你会抛出一个错误。...addToDatabase(customer)) .then(/* Send email */) .catch(err => console.log(err)) }) 复制代码 继续最后一步,在数据库操作成功客户发送电子邮件

1.4K20

ES6Promise深入学习

只要这两种情况发生,那么状态就不会再发送改变,就一直保持这个结果称为Resolved(已定型) 注意:虽然规范中用fulfill来表示成功,但在后世的 promise 实现多以resolve来指代之。...,它不便于我们对代码的阅读以及不便于我们后期对代码的维护和异常处理。...//第一种写法 promise.then(value=>{ //success },error=>{ //error }) //第二种写法 promise.then(value=>{...1.立即resolve的Promise对象是在本轮“事件循环”结束执行,而不是在下一轮“事件循环”开始执行 2.Promise的回调函数是同步回调函数,Promise一旦建立就会立即执行,无法中途取消...(没有异常),新promise变为resolved,value为返回的值 如果返回的是另一个promise,此promise的结果就会成为新promise 的结果 06- promise如何串联多个(

1.2K30

前端常考面试题(必备)_2023-05-19

对 Cookie 进行双重验证,服务器在用户访问网站页面请求域名注入一个Cookie,内容为随机字符串,然后当用户再次服务器发送请求的时候,从 cookie 取出这个字符串,添加到 URL 参数...cookie: 其实最开始是服务器端用于记录用户状态的一种方式,由服务器设置,在客户端存储,然后每次发起同源请求发送给服务器端。...且保存结果并将之前的promise.then推入微任务队列,再执行timerEnd;执行完这个宏任务,就去执行微任务promise.then,打印出resolve的结果。...,该例子中会返回.com的地址接着顶级域名服务器发送请求,然后会返回次级域名(SLD)服务器的地址,本例子会返回.test的地址接着次级域名服务器发送请求,然后会返回通过域名查询到的目标IP,本例子会返回...www.test.com的地址Local DNS Server会缓存结果,并返回给用户,缓存在系统CDN的工作原理: (1)用户未使用CDN缓存资源的过程:浏览器通过DNS对域名进行解析(就是上面的DNS

24620
领券