首页
学习
活动
专区
圈层
工具
发布

重学JavaScript Promise API

在这篇教程中,我们将掌握如何在JavaScript中创建并使用Promise。我们将了解Promise链式调用、错误处理以及最近添加到语言中的一些Promise静态方法。 什么是Promise?...在JavaScript中,一些操作是异步的。这意味着当这些操作完成时,它们产出的结果或者值并不会立即生效。 Promise是一个特殊的JavaScript对象,它代表了异步操作的最终结果。...它就像操作结果的代理。 回调函数 在拥有JavaScript Promise之前,处理异步操作最优雅的方式是使用回调。当异步操作的结果就绪时,回调就是一个运行的函数。...如果与Promise相关的操作成功(在我们的示例中是远程 API 调用),并且调用了 resolve 方法,那么Promise称为fulfilled。...我们只关心Promise的最终结果。 Promise链式调用 有时可能需要将多个异步任务按照特定顺序链在一起。这就是所谓的Promise链式调用。

40720

《你不知道的JavaScript》:ES6 Promise API 详解

本篇系统总结ES6 Promise API。 new Promise(…) 先看下 new Promise(…) 构造器。 new Promise(…) 构造器的参数必须提供一个函数回调。...Promise.all([…]) 和 Promise.race([…]) ES6 Promise API有两个静态辅助函数:Promise.all([...])和Promise.race([...])。...如果有任何promise被拒绝,返回的主promise就会立即被拒绝(并且会抛弃任何其他promise的结果)。如果完成的话,就会得到一个数组,其中包含传入的所有promise的完成值。...对于Promise.race([...])来说,只有第一个决议的promise(完成或拒绝)取胜,并且其决议结果成为返回promise的决议。这种模式传统上称为门闩,即第一个到达者打开门闩通过。...); //如果有任何promise被拒绝,返回的主promise就会立即被拒绝(并且会抛弃任何其他promise的结果),你只会得到第一个拒绝promise的拒绝理由值 Promise.all([p1

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

    Promise: 给我一个承诺,我还你一个承诺

    于是,在各种版本的第三方javascript类库里,大家都实现了各自的Promise/A+对象,来减少对callback的依赖。...Promise是这样一个对象,对于任意的异步操作,它提供了一组固定的API,来操作这个结果。我们先看一段代码: ?...比如你有一个处理,需要依赖多个数据源,他们或同步(数据已经在内存中直接可读),或异步(数据需要从数据库或者文件系统读取,甚至来自第三方API),正常来说似乎很难被抽象成一个数据结构。...比如说 Promise.all(iterable)(resolve所有结果,返回新的Promise),或者 Promise.race(iterable)(只要有一个结果resolve出来,就立即返回新的...第二,Promise的API设计感觉有些缺陷,并非lazy(可能是历史原因,也可能考虑到API友好程度),一旦启动,不可终止。如果你需要处理可终止的异步操作,那么,也需要使用Observable。

    1.3K40

    JavaScript引擎是如何工作的?从调用栈到Promise你需要知道的一切

    幸运的是我们的函数是同步的:它是一个简单的乘法,可以很快的得到计算结果。 同时,引擎还分配了全局执行上下文,这是 JavaScript 代码运行的全局环境。...即使我简化了一些东西,如果你理解了上面的图,那么就可以理解 JavaScript 的一切了。 请记住:Browser API、回调队列和事件循环是异步 JavaScript 的支柱。...Promise 可以返回数据,通过把 then 附加到 Promise 来提取数据。在下一节中,我们将看到如何处理来自 Promise 的错误。...Promise API 提供了一系列将 Promise 组合在一起的方法。其中最有用的是Promise.all,它接受一系列 Promise 并返回一个Promise。...我们可以将 Promise 包装在标记为 async 的函数中,然后等待结果: 1const myPromise = new Promise(function(resolve, reject) { 2

    1.7K30

    探索 | 我只是想保存一个 Key!

    当我们在写普通的 JavaScript 时,我们肯定会这样储存和读取数据: localStorage.setItem("Information", "Token BBB-BBB-BBB"); localStorage.getItem...Channel API 的伪代码,可供参考(代码来自 StackOverflow): // Message Channel API // include your worker var myWorker...=> { localforage.getItem("Information").then((e) => { console.log(e); }); }); }); 输出结果如下...: 当然,localforage 还提供了无 Promise 版(同步函数),但是由于 Service Worker 基于 Promise 实现,所以 localforage 无法使用 localStorage...这类同步函数,因此,你获得的返回结果仍然为 Promise(因为 Cache API 和 IndexedDB 也是异步执行) 使用 Cache 储存数据 # Service Worker 中的 Cache

    18810

    【JS】2030- 通过可视化彻底搞懂 Promise执行逻辑

    深入探讨了 JavaScript 中 Promise 的内部机制,解释了它们如何使异步任务以非阻塞方式执行,并展示了 Promise 的创建、状态变化以及与事件循环的关系。...在这篇博客文章中,我们将深入探讨 Promise 的一些内部机制,并探索它们是如何使得 JavaScript 能够执行非阻塞的异步任务。...然而,延迟本身并不是由 promise 引起的。promise 被设计为与异步操作一起工作,但这些异步操作可以来自不同的来源,如定时器或网络请求。...then 的 [[PromiseResult]] 被设置为计算的结果,这个结果又被下一个 then 的处理程序使用。 最终,结果被记录下来。...Promise 然是一个基础概念,对每个 JavaScript 开发人员来说都很重要。

    50110

    面试官:为什么Promise中的错误不能被trycatch?

    ,要么我们可能就在写bug 而且,如果我们想对一个异步逻辑注册多个回调,这也要看api提供方支不支持 最重要的,如果有统一的方式来处理错误跟正确结果的话,我们就有可能实现一套通用的逻辑来简化代码复杂度,...Thenable JavaScript Promise的标准来自Promise/A+,,所以JavaScript的Promise符合Promise/A+标准,但是也增加了一些自己的特性,比如catch跟...大部分情况下,我们还是使用其它api返回的Promise,比如fetch的返回结果,只有我们自己提供api时或者封装一些老的api时(比如包装xhr),我们才会自己创建一个Promise。...而且我们知道了我们可以在then/catch/finally里面返回Promise来resolve它们创建的Promise,那我们就可以串联一些依赖其它异步操作结果且返回Promise的api了。...所以我们可以把我们的Promise对象给其他人去使用,比如我们提供给外部一个api,以Promise返回,可以放心地让外部通过Promise来观察最终的结果,他们也没办法来改变Promise的状态。

    1.9K30

    如何取消 JavaScript 中的异步任务

    中止信号(Abort signal) 在将 Promise 引入 ES2015 并出现了一些支持新异步解决方案的 Web API 之后不久,需要取消异步任务的需求就出现了(https://github.com...所以你可以在任何类型的异步 API 中使用 —— 甚至是那些目前还不存在的 API。目前只有 Fetch API 正式支持,但是你也可以在自己的代码中使用它!...可终止函数 假设我们用一个异步函数执行一些非常复杂的计算(例如,异步处理来自大数组的数据)。...为简单起见,示例函数通过先等待五秒钟然后再返回结果来模拟这一工作: function calculate() { return new Promise( ( resolve, reject ) =>...五秒钟后,将显示带有结果的警报对话框(3)。

    4K10

    听说你还不知道Promise的allSettled()和all()的区别?

    译文来自 https://dev.to/viclafouch/promise-allsettled-vs-promise-all-in-javascript-4mle 原作者 Victor de la...(所以 promise 越来越流行,掌握它的相关 API 变得至关重要)。...Promise.all()方法将一组可迭代的 Promises 作为输入,并返回一个 Promise ,该 Promise resolve 的结果为刚才那组 输入 promises 的返回结果。 ?...当所有的 promises 都已经结束无论是完成状态或者是失败状态,它都会返回一个 promise,这个 promise 将会包含一个关于描述每个 promise 状态结果的对象数组。...对于每个结果对象,都有一个状态字符串: fulfilled(完成) ✅ rejected(失败) ❌ 返回值(或原因)表现每个 promise 的完成(或失败)。

    3.3K30

    深入理解 JavaScript 异步编程:Promise 与 AsyncAwait

    深入理解 JavaScript 异步编程:Promise 与 Async/Await作为一名 JavaScript 开发者,我经常需要处理 异步操作,比如访问 API、数据库查询或文件读取。...Promise.all() 与 Promise.race():并行执行多个任务Promise.all()如果我们有多个 独立 的异步任务,希望它们同时执行并在所有任务完成后返回结果,可以使用 Promise.all...Promise.race()如果我们只需要 最快完成的任务结果,而不关心其他任务,可以使用 Promise.race():Promise.race([fetchUser(), fetchOrders()...]) .then(result => console.log("最快完成的任务返回:", result));Promise.race() 适用于 超时控制,比如 API 超时后自动切换到备用方案。...总结在这篇文章里,我介绍了 JavaScript 的异步编程,并深入讲解了:为什么 JavaScript 需要异步机制如何使用 Promise 进行异步操作Async/Await 如何让代码更直观Promise.all

    43810

    Deno 1.0正式发布!它能替代 NodeJS 吗?

    随着 JavaScript 语言的不断变化,以及诸如 TypeScript 之类的新增改进,Node 项目的构建可能会成为一项艰巨的工作,过程中需要管理构建系统和其他需要繁重操作的工具链,结果大大抵消了动态语言脚本的优势...Promise 的支持下放到底层 Node 是在 JavaScript 引入 Promise 或 async/await 概念之前设计的。...Node 中与 promise 对应的是 EventEmitter,像套接字(socket)和 HTTP 这样的重要 API 则环绕其外。...系统的最低绑定层从根本上绑定了 promise——我们称这些绑定为“ops”。Deno 中的所有回调,无论形式如何,都是来自 promise 的。...通过“op”抽象,Deno 让开发人员可以轻松将 Rust 的基于 future 的 API 绑定到 JavaScript promise 中。

    1K10

    Deno 1.0正式发布!它能替代 NodeJS 吗?(对比)

    随着 JavaScript 语言的不断变化,以及诸如 TypeScript 之类的新增改进,Node 项目的构建可能会成为一项艰巨的工作,过程中需要管理构建系统和其他需要繁重操作的工具链,结果大大抵消了动态语言脚本的优势...Promise 的支持下放到底层 Node 是在 JavaScript 引入 Promise 或 async/await 概念之前设计的。...Node 中与 promise 对应的是 EventEmitter,像套接字(socket)和 HTTP 这样的重要 API 则环绕其外。...系统的最低绑定层从根本上绑定了 promise——我们称这些绑定为“ops”。Deno 中的所有回调,无论形式如何,都是来自 promise 的。...通过“op”抽象,Deno 让开发人员可以轻松将 Rust 的基于 future 的 API 绑定到 JavaScript promise 中。

    84710

    Deno 1.0正式发布!它能替代 NodeJS 吗?(对比)

    随着 JavaScript 语言的不断变化,以及诸如 TypeScript 之类的新增改进,Node 项目的构建可能会成为一项艰巨的工作,过程中需要管理构建系统和其他需要繁重操作的工具链,结果大大抵消了动态语言脚本的优势...Promise 的支持下放到底层 Node 是在 JavaScript 引入 Promise 或 async/await 概念之前设计的。...Node 中与 promise 对应的是 EventEmitter,像套接字(socket)和 HTTP 这样的重要 API 则环绕其外。...系统的最低绑定层从根本上绑定了 promise——我们称这些绑定为“ops”。Deno 中的所有回调,无论形式如何,都是来自 promise 的。...通过“op”抽象,Deno 让开发人员可以轻松将 Rust 的基于 future 的 API 绑定到 JavaScript promise 中。

    86620
    领券