Javascript 什么时候应该将函数定义为异步

Javascript 什么时候应该将函数定义为异步,javascript,async-await,ecmascript-harmony,Javascript,Async Await,Ecmascript Harmony,这个问题困扰了我很长时间,所以我决定寻求帮助,我相信没有确定的答案,这可能是一个公开的讨论 如果我的一项职能: 回报承诺 无需等待任何其他功能 不要创建承诺本身,它只返回由另一个函数返回的承诺 不要对承诺调用then或catch,这样就不会涉及进一步的异步流 此函数是否应该是异步的 例如: async function updateUser(user) { return await fetch('/some/url', {body: JSON.stringify(data)}); }

这个问题困扰了我很长时间,所以我决定寻求帮助,我相信没有确定的答案,这可能是一个公开的讨论

如果我的一项职能:

  • 回报承诺
  • 无需等待任何其他功能
  • 不要创建承诺本身,它只返回由另一个函数返回的承诺
  • 不要对承诺调用
    then
    catch
    ,这样就不会涉及进一步的异步流
  • 此函数是否应该是异步的

    例如:

    async function updateUser(user) {
        return await fetch('/some/url', {body: JSON.stringify(data)});
    }
    
    function growUp1(user) {
        user.age++;
        return updateUser(user);
    }
    
    async function growUp2(user) {
        user.age++;
        return await updateUser(user);
    }
    
    我认为
    group1
    在巴贝尔转换后更简单,代码更整洁,性能更好(因为涉及的异步生成器更少),而
    group2
    updateUser
    在异步和同步之间切换时更健壮

    我们是否应该强制执行:

  • 如果函数返回承诺,它必须是异步的
  • 如果函数依赖于
    async
    函数,则它必须
    async
  • 还是让团队成员自由使用


    进一步的问题可能是,如果一个函数只包含一些简单的
    then
    承诺调用,那么它是否应该成为
    async
    函数,并在所有可能的情况下使用
    wait
    来消除
    then
    调用?

    我不会将它变成
    异步函数。当然,正常函数返回一个承诺仍然应该被适当地记录下来

    一个重要的考虑事项是

    async function f(x) {
        return await x;
    }
    
    不完全是-实际上是函数。如果您等待一个
    x
    承诺并返回结果,那么返回的不是
    x
    ,而是一个新的承诺。这确实会产生一些开销(尽管它不太可能很大)

    我们是否应该强制执行

    这取决于你的团队。如果您同意将
    async
    关键字作为承诺返回函数的标记,并且希望在这方面保持一致,那么只需将其包含在您的样式指南中并遵循它即可


    我个人认为这不是一个好主意,你不应该对它武断。仅在适当的地方使用
    async

    这个问题似乎只是征求意见。我不确定它是否最适合这样做。在一天结束时,答案是做你认为最好的事情。