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