首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉姆达- andThen,否则,andFinally?

拉姆达- andThen,否则,andFinally?
EN

Stack Overflow用户
提问于 2020-09-29 15:41:59
回答 2查看 267关注 0票数 0

在Ramda中是否有一个'finally‘实现,用于进行函数组合,并调用一个函数,而不管promise的结果如何?我想做这样的事情:

代码语言:javascript
复制
compose(
    finally(() => console.log("The promise resolved or rejected, who cares!"))
    fetchAsync(id)
)

如果不是,我正在考虑做一些这样的事情:

代码语言:javascript
复制
const finally = fn => compose(
        otherwise(() => fn()),
        andThen(() => fn())
);

对此有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-09-29 16:17:53

无论结果如何,otherwise之后的andThen调用都会被调用,并且可以充当finally

代码语言:javascript
复制
compose(
  andThen(() => console.log("The promise resolved or rejected, who cares!")),
  otherwise(() => console.log('failed')),
  fetchAsync(id)
)
票数 0
EN

Stack Overflow用户

发布于 2020-10-05 23:28:53

我不认为otherwise在这种情况下是足够的,因为它只被称为on-failure。相比之下,无论如何,.finally都会被调用-

代码语言:javascript
复制
const effect = f => x =>
  (f(x), x)
  
const log = label =>
  effect(x => console.log(label, x))
  
const err = label =>
  effect(x => console.error(label, x))

const test = p =>
  p
  .then(log("resolved"))
  .catch(err("rejected"))
  .finally(log("you will ALWAYS see this"))

test(Promise.resolve(1))
test(Promise.reject(2))

代码语言:javascript
复制
resolved 1
Error: rejected 2
you will ALWAYS see this undefined
you will ALWAYS see this undefined

我不确定Ramda的库中是否有这样的函数。如果不是,它很容易实现-

代码语言:javascript
复制
const andFinally =
  curry(function(f, p){ return p.finally(f) })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64115025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档