首页
学习
活动
专区
工具
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对象完成后再执行后续的操作。

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

相关·内容

Promise中的then链机制

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

19020

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 {...} 喜欢这个帖子?请分享!

2.1K20
  • 手写一个符合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

    63330

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

    更好的阅度体验 前言 API Promise特点 状态跟随 V8中的async 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 case的Promise类 PromiseA+ ES6

    1.1K20

    盘点JavaScript中的Promise 链的高级用法

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

    1.1K20

    关于 JavaScript 中的 Promise

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

    73062

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

    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就会解决或拒绝。

    46030

    JavaScript中的Promise使用详解

    熟悉前端开发的都一定写过回调方法(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.4K1513

    iOS 中的 Promise 设计模式

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

    1.5K00

    JS中的Callback VS Promise

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

    5.4K21

    iOS 中的 Promise 设计模式

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

    4.1K10

    JavaScript中AsyncAwait和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.8K20

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

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

    96220

    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
    领券