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

你能返回一个带有预定义finally的Promise吗?

可以,可以通过自定义一个带有预定义finally的Promise来实现。在JavaScript中,Promise对象是一种用于处理异步操作的机制,它可以将异步操作封装成一个Promise实例,通过then()方法来处理异步操作的结果。

下面是一个示例代码,展示如何创建一个带有预定义finally的Promise:

代码语言:txt
复制
function createPromiseWithFinally(promiseFn, finallyFn) {
  return new Promise((resolve, reject) => {
    promiseFn()
      .then((result) => {
        resolve(result);
      })
      .catch((error) => {
        reject(error);
      })
      .finally(() => {
        finallyFn();
      });
  });
}

// 使用示例
const promise = createPromiseWithFinally(
  () => {
    // 异步操作
    return new Promise((resolve) => {
      setTimeout(() => {
        resolve('Success');
      }, 1000);
    });
  },
  () => {
    // finally回调函数
    console.log('Finally');
  }
);

promise
  .then((result) => {
    console.log(result);
  })
  .catch((error) => {
    console.error(error);
  });

在上述示例中,createPromiseWithFinally函数接受两个参数:promiseFn和finallyFn。promiseFn是一个返回Promise实例的函数,用于执行异步操作。finallyFn是一个回调函数,在Promise执行结束后无论成功还是失败都会执行。

通过调用createPromiseWithFinally函数,我们可以创建一个带有预定义finally的Promise。在该Promise中,我们使用promiseFn执行异步操作,并在then()和catch()方法中处理异步操作的结果。在finally()方法中调用finallyFn回调函数,以确保无论Promise的状态如何,finallyFn都会被执行。

这样,我们就可以通过自定义一个带有预定义finally的Promise来实现特定的需求。

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

相关·内容

可能会搞砸面试:知道一个TCP连接上发起多少个HTTP请求

至于标准为什么这么设定,我们可以大概推测一个原因:由于 HTTP/1.1 是个文本协议,同时返回内容也并不能区分对应于哪个发送请求,所以顺序必须维持一致。...q=B,服务器返回了两个结果,浏览器是没有办法根据响应结果来判断响应对应于哪一个请求。...TCP 连接吧,电脑同意 NAT 也不一定会同意。...(中文珍藏版)》 《UDP中一个大小最大多大?》...百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇》 《技术大牛陈硕分享:由浅入深,网络编程学习经验干货总结》 《可能会搞砸面试:知道一个TCP连接上发起多少个HTTP请求?》

1.6K40

【JS】1917- 8 个关于 Promise 高级用途技巧

Promise数组串行执行 例如,如果有一组接口需要串行执行,可能首先想到使用await。...在新 Promise 范围之外更改状态 假设有多个页面,其功能要求在允许使用之前收集用户信息。 点击使用某个功能之前,会弹出一个弹框进行信息收集。 会如何实施这个?...3. async/await 替代用法 很多人只知道它是用来在调用await时接收async函数返回,却不知道async函数它实际上是一个返回promise函数。...6.彻底明确then/catch/finally返回值 一句话概括就是,上面三个函数都会返回一个promise包装对象。 包装后值是执行回调函数返回值。...总结 以上就是我今天想与分享8个关于Promise高级用途全部内容,如果觉得有用的话,请记得点赞我,关注我,并将这个内容分享给你小伙伴们,也许能够帮助到他。

19310
  • 探索Promise高级应用:8个技巧大揭秘

    Promise数组串行执行 例如,如果有一组接口需要串行执行,可能首先想到使用await。...在新 Promise 范围之外更改状态 假设有多个页面,其功能要求在允许使用之前收集用户信息。 点击使用某个功能之前,会弹出一个弹框进行信息收集。 会如何实施这个?...3. async/await 替代用法 很多人只知道它是用来在调用await时接收async函数返回,却不知道async函数它实际上是一个返回promise函数。...6.彻底明确then/catch/finally返回值 一句话概括就是,上面三个函数都会返回一个promise包装对象。 包装后值是执行回调函数返回值。...总结 以上就是我今天想与分享8个关于Promise高级用途全部内容,如果觉得有用的话,请记得点赞我,关注我,并将这个内容分享给你小伙伴们,也许能够帮助到他。

    22310

    151. 精读《@umijsuse-request》源码

    定义请求依赖 利用 useEffect 和自带 deps 即可。 分页 基于通用取数 Hook 封装,本质上是多带了一些取数参数与返回值参数,并遵循 Antd Table API。...加载更多 和分页类似,区别是加载更多不会清空已有数据,并且需要根据约定返回结构 noMore 判断是否继续加载。 3 精读 接下来是源码分析。...首先定义一个类 Fetch,这是因为一个 useRequest fetchKey 特性可以通过多实例解决。...轮询请求 轮询取数在 Fetch 实际取数函数 _fetch 中定义,当取数函数 fetchService(对多种形态取数方法进行封装后)执行完后,无论正常还是报错,都要进行轮询逻辑,因此在 .finally...这里实现比较简化,防抖后 run 拿到 Promise 不再是有效取数结果了,其实这块还是可以进一步对 Promise 进行封装,无论在防抖还是正常取数场景都返回 Promise,只需 resolve

    74930

    Android自定义View:需要一个简单好用、含历史搜索记录搜索框

    源码解析 具体请看文章:Android开源库:手把手教你实现一个简单好用搜索框(含历史搜索记录) ---- 7....贡献代码 希望你们和我一起完善这款简单 & 好用SearchView控件,具体请看:贡献说明 关于该开源项目的意见 & 建议可在Issue上提出。欢迎 Star ! ---- 8....总结 相信一定会喜欢上 这款简单 & 好用SearchView控件 已在Github上开源:SearchView,欢迎 Star !...下一篇文章我将继续进行一些有趣定义View实例讲解,有兴趣可以继续关注Carson_Ho安卓开发笔记 更多简单好用开源库:简单 & 好用开源组件: 自定义EditText:手把手教你做一款含一键删除...因为鼓励是我写作最大动力!

    2.5K30

    【MDN学习】JavaScript 之 Promise

    }); 更多示例:传送门 五、Promise.reject(reason) reject()方法返回一个带有拒绝原因Promise对象,参数即为被拒绝原因 // 还记得前面是怎么写?...回调结果是一个数组,即我们传入所有 Promise 实例 reject 表示只有一个失败,则返回一个失败结果 成功案例 let p = new Promise((resolve, reject...返回值: 如果传入参数是一个可迭代对象,则返回一个 已失败(already rejected) 状态 Promise。...(iterable) 方法返回一个 promise,一旦迭代器中某个promise解决或拒绝,返回 promise就会解决或拒绝。...}); // expected output: "two" 十、Promise.prototype.finally() finally() 方法返回一个Promise

    92120

    Promise面试题,一次爽到底

    复制代码 3.Promisethen、catch、finally 总结: Promise状态一经改变就不能再改变。(见3.1) .then和.catch都会返回一个Promise。...其实只要记住它三个很重要知识点就可以了: .finally()方法不管Promise对象最后状态如何都会执行 .finally()方法回调函数不接受任何参数,也就是说在.finally()函数中是没法知道...Promise最终状态是resolved还是rejected 它最终返回默认会是一个上一次Promise对象值,不过如果抛出一个异常则返回异常Promise对象。...(err => console.log(err)) .finally(() => console.log('finally2')) 复制代码 执行过程:首先定义了两个函数promise1和promise2...结果: 'promise1' '1' 'error' 'finally1' 'finally2' 复制代码 在这道题中其实拓展东西挺多,之前没有提到,那就是可以理解为链式调用后面的内容需要等前一个调用执行完才会执行

    74010

    2022前端笔试题总结

    也就是说在.finally()函数中是无法知道Promise最终状态是resolved还是rejected它最终返回默认会是一个上一次Promise对象值,不过如果抛出一个异常则返回异常...3、then方法返回一个Promise实例,并接收两个参数onResolved(fulfilled状态回调);onRejected(rejected状态回调,该参数可选)4、catch方法返回一个...,会直接返回一个fulfilled状态 Promise 对象。...懒加载与加载区别这两种方式都是提高网页性能方式,两者主要区别是一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定缓解压力作用,加载则会增加服务器前端压力。...,例如文件传输 Promise.allSettled描述:等到所有promise返回结果,就返回一个promise实例。

    2.1K40

    JavaScript之Promise对象

    Promise 对象是一个代理对象(代理一个值),被代理值在 Promise 对象创建时可能是未知。它允许为异步操作成功和失败分别绑定相应处理方法(handlers)。...这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个代表未来出现结果 Promise 对象。 Promise 对象有以下两个特点: 对象状态不受外界影响。...如果改变已经发生了,再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件特点是,如果错过了它,再去监听,是得不到结果。...这时,前一个回调函数,有可能返回还是一个 Promise 对象(即有异步操作),这时后一个回调函数,就会等待该 Promise 对象状态发生变化,才会被调用。...(1); p1.then(function (n) { console.log(n) }); // 1 (4)不带有任何参数 Promise.resolve 方法允许调用时不带参数,直接返回一个

    86530

    来45道Promise面试题一次爽到底(1.1w字用心整理)

    (见3.9) .finally方法也是返回一个Promise,他在Promise结束时候,无论结果为resolved还是rejected,都会执行里面的回调函数。...(err)) .finally(() => console.log('finally2')) 执行过程: 首先定义了两个函数promise1和promise2,先不管接着往下看。...结果: 'promise1' '1' 'error' 'finally1' 'finally2' 在这道题中其实扩展东西挺多,之前没有提到,那就是可以理解为链式调用后面的内容需要等前一个调用执行完才会执行...1 2 3 [1, 2, 3] 所以现在理解这句话意思了吗:有了all,就可以并行执行多个异步操作,并且在一个回调中处理所有的返回数据。...几题做基础,相信很快也答上来了。 ? 自信写下你们答案吧。

    2K20

    2021JavaScript面试题(最新)不定时更新(2021.11.6更新)

    为什么使用懒加载 懒加载原理 为什么使用加载 实现加载方法 加载应用场景 JS垃圾回收机制说一下 如果页面卡顿,觉得可能是什么原因造成?有什么办法锁定原因并解决?...) 是怎么实现 对象去重 根据对象id去重 手写一下发布-订阅模式 既然React/Vue可以用Event Bus进行组件通信,可以实现下?...Promise原型上定义一个 then 方法, 分别是成功和失败回调。我们可以使用这个 then 方法可以为两个状态改变注册回调函数。 这样子我们创建了一个最基本promise。...map用来遍历数组并改变数据,返回新数组。 1、forEach()方法不会返回执行结果,而是undefined;map()方法会得到一个数组并返回。 2、map保证原始数组不变。...为什么使用加载 在页面全部加载完毕之前,对一些主要内容进行加载,先让用户看到,减少用户等待时间。 有一些资源我们希望浏览器尽早发现,防止重新渲染。

    2.6K11

    可视化 js:动态图演示 Promises & AsyncAwait 过程!

    幸运,ES6 中 Promise 很好处理这种情况! 让我们看看 promise 是什么,以及它是如何在类似于上述情况下帮助我们Promise语法 ES6引入了Promise。...我们可以使用一个接收一个回调函数 Promise 构造器创建一个 promise。 好酷,让我们尝试一下! 等等,刚刚得到返回值是什么?...当一个 Promise 解决 (resolve) 并且调用它 then()、catch() 或 finally() 方法时候,这些方法里回调函数被添加到微任务队列!...(微任务自己也返回一个微任务,有效地创建无限微任务循环 ) 如果调用栈和微任务队列都是空,事件循环会检查宏任务队列里是否还有任务。...注意到async函数相比于promisethen有什么不同?await关键字暂停了async函数,然而如果我们使用then的话,Promise主体将会继续被执行! 嗯,这是相当多信息!

    2.1K10

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

    如果是一个带有thenable方法对象,就会调用它thenable方法来resolve给当前Promise。...它也会返回一个Promise,然后它状态也是根据之前Promise以及handler执行结果决定。不过finally handler能做事相比而言更有限。...除了返回rejectedthenable,其他值都会被忽略。也就是说,如果finally里面产生了异常,或者返回thenable进入rejected状态了,它会改变返回Promise结果。...所以它即使返回一个值,最后调用方拿到也是它之前Promise返回值,但是它可以把fulfillment变成rejection,也可以延迟fulfillment(毕竟返回一个thenable的话...then也被调用 我们只能通过executor函数提供两个函数来改变Promise状态,没有其他办法可以resolve或者reject Promise,而且这两个方法也不存在于Promise本身,

    1.5K30

    JavaScript错误处理完全指南

    其他团队成员总是访问 error.message,更重要可以检查堆栈跟踪。除了 Promise.reject,我们还可以通过 抛出 异常来退出 Promise 链。...; }, 1000); }); } 通过 reject,我们启动了一个 Promise 拒绝,带有一个错误对象。...接收一个 Promise 数组,并从所有解析中 Promise 返回一个结果数组: const promise1 = Promise.resolve("All good!")...] 如果这些 Promise任何一个被拒绝,Promise.all 都会拒绝,并返回一个被拒绝 Promise错误。...即使数组中只有一个 Promise 拒绝,Promise.all 也会返回失败;而 Promise.any 始终为我们提供第一个已解析 Promise(如果存在于数组中),不管发生了什么拒绝。

    5K20

    不知道JavaScript》 (中) 阅读摘要

    本书属于基础类书籍,会有比较多基础知识,所以这里仅记录平常不怎么容易注意到知识点,不会全记,供大家和自己翻阅; 上中下三本读书笔记: 《不知道JavaScript》 (上) 读书笔记 《不知道...a值 规范定义 var 结果值是 undefined 代码块 { ... } 结果值是其最后一个语句表达式结果 标签语句 { foo: bar() } 这里 foo 是标签语句,带标签循环跳转可以使用...函数会终值,如果之前 try 中已经 return 了返回值,则返回值会被丢弃; finally return 会覆盖 try 和 catch 中 return 返回值; finally 中如果没有...如果遇到这种情况: 使用JS调试器中断点,而不要依赖控制台输出; 把对象序列化到一个字符串中,以强制执行一次快照,比如通过 JSON.stringify; 第三章 Promise 回调未调用 如果 Promise...状态一直未改变,怎么得到通知呢,这里可以使用 Promise.race 竞态,如果在设置时间内还未返回,那么 Promise 将会被 reject; function timeoutPromise(delay

    81410

    Promise

    实例 Promise.prototype.then() Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上 可以采用链式写法,即then方法后面再调用另一个...对象错误具有“冒泡”性质,会一直向后传递,直到被捕获为止 Promise.prototype.finally() finally方法用于指定不管 Promise 对象最后状态如何,都会执行操作 Promise.all...p1、p2、p3返回值组成一个数组,传递给p回调函数。...Promise 实例 参数是一个thenable对象 参数不是具有then方法对象,或根本就不是对象 不带有任何参数 Promise.reject() Promise.reject(reason)方法也会返回一个...使用 Generator 函数管理流程,遇到异步操作时候,通常返回一个Promise对象。

    70330
    领券