【发布时间】:2017-06-03 11:01:44
【问题描述】:
在 TS 中有一个很好的链接异步方法的机制:promises。 你可以做1.then(()=>...).catch(()=>...)。
但是如果我想链接同步方法怎么办? 在这个问题How to avoid logic duplication when promisifying js methods? 我是建议不要使用承诺来做到这一点。
在 C# 中,我很高兴使用 Maybe 和 Result 类来做到这一点。 任何方法都会返回一个类Result。它将有方法 OnSuccess(将方法的结果传递给它)和 OnFailure(将错误传递给它)。
使用这些类的 TS 代码如下所示:
public processAndDouble(input: number) : number {
return processData(input)
.onSuccess((processedInput)=>{
return processedInput * 2;
})
.onFailure((error)={
return 0;
})
}
public processData(input: number) : Result<number> {
if(input >= 0)
return Result.Ok(input + 1);
else
return Result.Fail("can't process negative numbers");
}
那么,问题是,使用这种方法可以吗?
这不与一些最佳实践、原则相矛盾吗?
【问题讨论】:
-
只要您 100% 确信链中永远不会有单个异步调用,就可以了。一旦发生,您必须将所有内容都转换为 Promise。
-
谢谢你,Artem,我喜欢你的回答。我说的是同步。操作。讨厌将它们作为变量声明和赋值的序列。
标签: javascript c# typescript functional-programming