首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Go的Defer语句的TypeScript等价物

Go的Defer语句的TypeScript等价物
EN

Stack Overflow用户
提问于 2020-03-25 19:25:06
回答 3查看 440关注 0票数 3

TypeScript有没有类似于Go的Defer语句?

我厌倦了在一个函数中的多个位置编写清理代码。寻找更简单的解决方案。

我在谷歌上快速搜索了一下,但什么也没找到。

EN

Stack Overflow用户

发布于 2020-03-25 19:31:43

可以说答案是否定的,但你至少有几个选择:

  1. 正如@bereal提到的,你可以使用一个try/finally来实现。Re try/finally,你在评论中说:

是的,除非我不想使用try catch块,因为它们可能很昂贵。

不怎么有意思。抛出异常的开销很大,而进入try块则不是。finally块有轻微的开销,但我最近不得不在几个现代引擎中测量这一点,这真的是令人惊讶的微不足道。

  1. 您可以将一个函数赋给一个变量,然后在该函数的末尾运行它(或者,如果您想执行多个操作,也可以使用一个数组)。对于单一的清理,我希望它比try/finally更昂贵。对于多个(否则将需要嵌套的try/finally块),那么,您必须找出答案。

FWIW,一些例子:

try/finally中执行一次清理

代码语言:javascript
运行
复制
function example() {
    try {
        console.log("hello");
    } finally {
        console.log("world");
    }
}
example();

try/finally中的多重清理

代码语言:javascript
运行
复制
function example() {
    try {
        console.log("my");
        try {
            console.log("dog");
        } finally {
            console.log("has");
        }
    } finally {
        console.log("fleas");
    }
}
example();

通过赋值函数进行单次清理:

代码语言:javascript
运行
复制
function example() {
    let fn = null;
    fn = () => console.log("world");
    console.log("hello");
    if (fn) { // Allowing for the above to be conditional, even though
              // it isn't above
        fn();
    }
}
example();

try/finally中的多重清理

代码语言:javascript
运行
复制
function example() {
    const cleanup = [];
    cleanup.push(() => console.log("has"));
    console.log("my");
    cleanup.push(() => console.log("fleas"));
    console.log("dog");
    cleanup.forEach(fn => fn());
}
example();

或者以另一种顺序:

代码语言:javascript
运行
复制
function example() {
    const cleanup = [];
    cleanup.push(() => console.log("fleas"));
    console.log("my");
    cleanup.push(() => console.log("has"));
    console.log("dog");
    while (cleanup.length) {
        const fn = cleanup.pop();
        fn();
    }
}
example();

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60847836

复制
相关文章

相似问题

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