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

Promise .then()不等待Promise链中前一个Promise的Resolve()

Promise .then()方法不会等待Promise链中前一个Promise的Resolve()。当调用.then()方法时,它会立即注册一个回调函数,该回调函数将在前一个Promise对象的状态变为resolved时被调用。如果前一个Promise对象的状态已经是resolved,那么回调函数将会立即执行;如果前一个Promise对象的状态还未resolved,那么回调函数将会在前一个Promise对象的状态变为resolved后被调用。

这种行为是Promise的特性之一,它允许我们在异步操作完成之前继续执行其他代码,从而提高程序的并发性和响应性。但是,如果我们需要确保前一个Promise对象的操作已经完成,才能继续执行后续的操作,我们可以使用Promise的其他方法,如Promise.all()或async/await来实现。

Promise.all()方法接收一个Promise数组作为参数,并返回一个新的Promise对象。该新的Promise对象将在所有的Promise对象都变为resolved状态后被resolved,或者在其中一个Promise对象变为rejected状态后被rejected。这样,我们可以通过Promise.all()方法来等待所有的Promise对象都完成后再执行后续的操作。

async/await是一种基于Promise的异步编程模型,它可以让我们以同步的方式编写异步代码。通过在函数前面加上async关键字,我们可以在函数内部使用await关键字来等待一个Promise对象的完成。在我们的例子中,我们可以使用async/await来等待前一个Promise对象的完成,然后再执行后续的操作。

总结起来,Promise .then()方法不会等待Promise链中前一个Promise的Resolve(),但我们可以使用Promise.all()或async/await来实现等待前一个Promise对象完成后再执行后续的操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Promisethen机制

Promisethen机制因为每一次 .then都会返回一个promise实例,所以我们就可以持续 .then下去了而且因为实例诞生方式不同,所以状态判断标准也不同第一类:new Promise...第三类:Promise.resolve(100) 返回一个状态是成功,值是100promise实例Promise.reject(0) 返回一个状态是失败,值是0promise实例只要实例状态和值我们分析好...,但是有些时候,我们是传递其中某个函数,这种情况下我们需要采取“顺延策略”:找到下一个then对应状态函数执行例如:.then(null,onrejected) 或者 .then(onfulfilled...;执行Promise.all返回一个promise实例@p并且传递一个数组,数组包含n多其他promise实例如果数组一个promise实例最后都是成功状态,则@p也会是成功,它值也是一个数组...await等待,一般在其后面放promise实例,它会等待实例状态为成功,再去执行“当前上下文”await下面的代码【如果promise实例管控一个异步编程,其实他是在等待异步执行成功,再执行下面代码

12920

JavaScript return await promise 与 return promise

,您可以等待该承诺得到解决,或者您可以直接返回它:return await promise return promise: async function func1() { const promise...(new Error("Cannot divide by 0")); } else { return Promise.resolve(n1 / n2); } } 复制代码 如果第二个(二维索)论点是...promisedDivision(n1, n2)0 因为现在会返回被拒绝承诺,让我们也包装到一个 - 看看被拒绝承诺是否被抓住。...catch(error) { ... } 现在,您可以轻松地看到使用和:return await promisereturn promise 当被包裹起来时,附近渔获物只有在等待承诺时才会被拒绝(这是事实...return await promiseawait `catch(error) {...}声明捕获只等待拒绝承诺在声明。try {...} 喜欢这个帖子?请分享!

2K20

手写一个符合Promise A+规范Promise实现

,这里将会处理返回promise或者其它情况下promise状态让其直接变为完成状态并将参数值传入到下一个then const resolvePromise = (promise2, x, resolve..., reject) => { let caller = false // 定义一个开关,为了让promise状态一旦确定则不能再做修改 // 如果promise是它自己,避免自己等待自己,直接抛错...// 将递归解析resolve参数直到不是一个promise对象 return doneValue.then(resolve, reject) } // 判断只有是等待状态时候才进行成功处理...回调 executor(resolve, reject) } catch (e) { reject(e) } } // 内部定时器作用是为了等待Promise...遍历数组promise promises.forEach((promise, index) => { // 判断是不是一个promise if (isObject

59730

Promise杂记 前言APIPromise特点状态追随V8async await和Promise实现一个Promise参考

更好阅度体验 前言 API Promise特点 状态跟随 V8async await和Promise 实现一个Promise 参考 前言 作为一个前端开发,使用了Promise...如果设置回调函数,Promise内部抛出错误,不会反应到外部 7. 处于pending时,无法感知promise状态(刚刚开始还是即将完成)。...async await和Promise 在进入正题之前,我们可以先看下面这段代码: const p = Promise.resolve(); (async () => { await p;...resolve,也就是B追随A状态 Node 8流程 1. p处于resolve状态,promise调用then被resolved,同时向microtask插入任务PromiseResolveThenableJob...深入理解 await 运行机制 V8更快异步函数和promise 剖析Promise内部结构,一步一步实现一个完整、能通过所有Test casePromise类 PromiseA+ ES6

1K20

关于 JavaScript Promise

Javascript 是一种单线程编程语言,支持异步执行,在阻塞主线程情况下满足并发执行需求。Javascript promise 是处理异步执行好方法。...多个then操作根据需求创建多个带有.then()方法Promise。...在下面的示例,我们模拟了一个简单异步操作,以演示Promise串行执行特性:// 异步操作1function asyncOperation1() { return new Promise(...相反,它会等待所有的 Promise 都被解决,并返回一个包含每个 Promise 结果数组,每个结果都是一个对象,包含有状态(fulfilled 或 rejected)和对应值或原因。...更好错误处理机制: Promise 具有 .catch() 方法,可以捕获 Promise 任何地方发生错误。这使得错误处理更加集中和可控,而不必在每个异步操作中都编写独立错误处理逻辑。

46363

盘点JavaScriptPromise 高级用法

浊酒销忧国泪,救时应仗出群才。 大家好,我进阶学习者。 一、前言 有一系列异步任务要一个一个地执行 — 例如,加载脚本。如何写出更好代码呢? Promise 提供了一些方案来做到这一点。...当远程服务器返回 header(是在 全部响应加载完成)时,该 promise 用使用一个 response 对象来进行 resolve。...就目前而言,是做不到。 为了使可扩展,需要返回一个在头像显示结束时进行 resolve promise。...注: 也就是说,第 (*) 行 .then 处理程序(handler)现在返回一个 new Promise,只有在 setTimeout resolve(githubUser) (**) 被调用后才会变为...一个 .then 将一直等待这一时刻到来。 作为一个做法,异步行为应该始终返回一个 promise。这样就可以使得之后计划后续行为成为可能。

1.1K20

手写一个Promise Class版本及Promiseapi使用方法

reason => {} 说明: excutor会在Promise内部立即同步回调,异步操作在执行器执行(executor 函数在Promise构造函数返回所建promise实例对象被调用...如果在executor函数抛出一个错误,那么该promise 状态为rejected。executor函数返回值被忽略。...如果 then 回调函数: 返回了一个值,那么 then 返回 Promise 将会成为接受状态,并且将返回值作为接受状态回调函数参数值。...}) 在异步函数抛出错误不会被catch捕获到 在resolve()后面抛出错误会被忽略 var p2 = new Promise(function(resolve, reject) { setTimeout...(iterable) 方法返回一个 promise,一旦迭代器某个promise解决或拒绝,返回 promise就会解决或拒绝。

43230

JavaScriptPromise使用详解

熟悉前端开发都一定写过回调方法(callback),简单说,回调方法是一个函数被作为参数传递给另一个函数,比如下面的代码 function say (value) { alert(value...resolve(value) }) } function execute(value) { return new Promise(function(resolve, reject) {...先来构造下一个Promise实例 const promise = new Promise(function(resolve, reject) { // … some code If (/* 异步操作成功...*/){ resolve(value); } else { reject(error); } }); Promise构造函数接受一个函数作为参数,该函数两个参数分别是resolve...Resolve函数作用是,将Promise对象状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作结果,作为参数传递出去; Reject

1.3K1513

JSCallback VS Promise

被链接每个任务只能在上一个任务完成后立即开始,由.thens 控制。...这些.then块是在内部设置,因此它们允许回调函数返回promise,然后将其应用于.then每个块. .then除了.catch块带来被拒绝Promise外,您从中返回任何东西最终都会变成一个正常...方法 JSPromise构造函数定义了几种静态方法,可用于从Promise检查一个或者多个结果 Promise.all 当你想要累计一批异步操作并最终将它们一个值作为一个数组来接收时,满足此目标的...这仅在此处类似于Promise.allSettled 。如果这些操作某一项或者多项失败,则Promise将拒绝并显示错误。最终,这会出现在.catchPromise 。...每当可迭代Promise一个Promise以该Promise值或原因解析或拒绝时,此方法都会返回一个履行或拒绝Promise

5.1K21

iOS Promise 设计模式

Promise 设计模式原理 Promise设计模式把每一个异步操作都封装成一个Promise对象,这个Promise对象就是这个异步操作执行完毕结果,但是这个结果是可变,就像薛定谔猫,只有执行了才知道...另外还有其它几个关键字用来表示一个Promise对象状态: pending: 任务执行,状态可能会进入下面的fullfill或者reject二者之一 fufill/resolved: 任务完成了,返回结果...这个方法是上面的thenon调用,接受两个参数,第一个参数是一个resolveblock,第二个参数是一个pendingblock。...一个Promise在执行完毕之后,无论状态是变成resolve还是pending,都通过这个方法,执行对应 then,并返回一个Promise对象。...上面的函数,有一个dispatchBarrierSync,barrier是栅栏意思,一般来说如果我们有多个异步任务,但是希望他们按照一定顺序执行,就可以使用这个方法。

1.4K00

iOS Promise 设计模式

Promise 设计模式原理 Promise设计模式把每一个异步操作都封装成一个Promise对象,这个Promise对象就是这个异步操作执行完毕结果,但是这个结果是可变,就像薛定谔猫,只有执行了才知道...另外还有其它几个关键字用来表示一个Promise对象状态: pending: 任务执行,状态可能会进入下面的fullfill或者reject二者之一 fufill/resolved: 任务完成了...这个方法是上面的thenon调用,接受两个参数,第一个参数是一个resolveblock,第二个参数是一个pendingblock。...一个Promise在执行完毕之后,无论状态是变成resolve还是pending,都通过这个方法,执行对应 then,并返回一个Promise对象。...上面的函数,有一个dispatchbarriersync ,barrier是栅栏意思,一般来说如果我们有多个异步任务,但是希望他们按照一定顺序执行,就可以使用这个方法

4K10

JavaScriptAsyncAwait和Promise区别

其他方式是回调或者Promise。 Async/Await实质是构建在Promise之上,它不能用于纯回调或者Node.js回调。...语法 假设函数getJSON()返回一个Promise,基于Promise调用示例如下: const makeRequest = () => getJSON() .then(data =>...async来标记这是一个异步函数,它隐含着表示函数会返回一个Promise,当函数返回值时就表示Promise被处理(resolve)了。...await关键字只能用在async标记函数内,换句话说它是不能用在代码最顶层。await意思是等待getJSON()返回Promise被处理了才会执行。...中间值 有一种情况是需要通过多个嵌套请求,其中前面的请求返回一个中间值,后面的请求需要使用中间值来发起请求。

2.7K20

JavaScript小技能:原型运作机制、Promise

Promise一个由异步函数返回可以向我们指示当前操作所处状态对象。在基于 Promise API ,异步函数会启动操作并返回 Promise 对象。...函数也可以被保存在变量,并且像其他对象一样被传递。典型代表:Promise 函数式编程:把操作尽量写成一系列嵌套函数或者方法调用。...2.2 Promise 当你操作由几个异步函数组成,而且你需要在开始下一个函数之前完成之前每一个函数时,你需要就是 Promise 。...当你创建一个 promise 时候你需要实现这个执行器,这个执行器本身采用两个参数,这两个参数都是函数,通常被称作 resolve 和 reject。...//以被唤醒人名字和一个在人被唤醒以毫秒为单位延迟作为参数。在延迟之后,本函数将会发送一个包含需要被唤醒人名字 "Wake up!" 消息。

89320

AngularJS Promise --- $q服务详解

但是有了Promise这种规范,它能帮助开发者用同步方式,编写异步代码,比如在AngularJS可以使用这种方式: deferABC.resolve(xxx) .then(funcSuccess(...在Promise,定义了三种状态:等待状态,完成状态,拒绝状态。...关于状态有几个规定: 1 状态变更是不可逆 2 等待状态可以变成完成或者拒绝 defer()方法 在$q,可以使用resolve方法,变成完成状态;使用reject方法,变成拒绝状态。...其中resolve传入变量或者函数返回结果,会当作第一个then方法参数。...all()方法 这个all()方法,可以把多个primise数组合并成一个。当所有的promise执行成功后,会执行后面的回调。回调参数,是每个promise执行结果。

1.5K90
领券