Typescript 如何使用任务monad?(fp ts) import*as T from'fp ts/lib/Task' 从“fp ts/lib/function”导入{pipe,flow} const getHello:T.Task=()=>新承诺((解析)=>{ 解决('你好') })
我理解Typescript 如何使用任务monad?(fp ts) import*as T from'fp ts/lib/Task' 从“fp ts/lib/function”导入{pipe,flow} const getHello:T.Task=()=>新承诺((解析)=>{ 解决('你好') }),typescript,functional-programming,fp-ts,Typescript,Functional Programming,Fp Ts,我理解任务的目的以及它的重要性。问题是,我真的不知道如何正确地使用它或用它作曲 如果我只是打电话给getHello(),它会给我承诺: console.log(getHello())//返回承诺 但是,如果我这样做: const run=async()=>{ const hello=wait getHello() console.log(hello)//打印“hello” } 它起作用了 但这是: const waitAndGet = async () => { return aw
任务的目的以及它的重要性。问题是,我真的不知道如何正确地使用它或用它作曲
如果我只是打电话给getHello()
,它会给我承诺
:
console.log(getHello())//返回承诺
但是,如果我这样做:
const run=async()=>{
const hello=wait getHello()
console.log(hello)//打印“hello”
}
它起作用了
但这是:
const waitAndGet = async () => {
return await getHello()
}
console.log(waitAndGet()) // prints Promise<pending>
首先,让我们了解什么是真正的
export interface Task<A> {
(): Promise<A>
}
// note that this could also be written as
export type Task<A> = () => Promise<A>
async
函数总是返回承诺,这与fp-ts无关。它似乎是可调用的返回承诺的东西的别名,而async
函数也是。非常感谢您花时间向我解释这一点,它意义重大!我现在好多了Task
的map
采用纯程序并应用于Task
,甚至在使用然后解决它之前。我知道这是另一个问题,我很抱歉,但我试着像你在上面做的一样,这给了我一个错误。除此之外,你知道有没有办法从任务中提取价值?如果你能仔细研究一下:或者,用更好的话来说,在编写它之后,我如何执行它?@padowbr对不起,我忘了添加这么简单的东西!要执行任务
,只需调用它:logHelloAndWorld()
。这同样适用于IO
s。对于错误,我很抱歉,我的错。我在回答中确定了这一点;它应该是getHello
,而不是getHello()
。没关系!非常感谢你。但是,如果我不想将解析的值记录到控制台,而是想返回值本身呢?