仅返回Promise.resolve结果的函数是否需用async?数据库场景呢?
1. 仅返回Promise.resolve的函数无需强制添加async关键字
你给出的示例代码:
const getUsername = () => Promise.resolve('Tom'); const getLocation = () => Promise.resolve('NY');
加不加async确实没有功能上的本质区别——async函数的核心作用是让函数自动返回一个Promise,同时允许内部使用await语法。如果你已经手动通过Promise.resolve()包装了返回值,这和async函数的默认行为完全一致。比如:
// 不加async,手动返回Promise const func1 = () => Promise.resolve('Tom'); // 加async,自动将返回值包装为Promise const func2 = async () => 'Tom';
调用这两个函数后,都会得到一个状态为resolved、值为'Tom'的Promise,两者完全等价。
2. 数据库场景下是否加async?看后续维护需求
如果是数据库查询的场景,当前代码可能只是用Promise.resolve()模拟数据,但未来大概率会改成真实的异步查询(比如需要用await db.query(...)),这种情况下提前加上async会更方便——因为await必须在async函数内部使用,提前加好可以避免后续修改函数结构。
反之,如果确定这个函数永远只会返回一个已resolved的Promise,不会新增任何异步逻辑,那不加async也完全没问题,代码会更简洁。
3. 不是只要用Promise.resolve就必须用async
Promise.resolve()是独立的Promise构造方法,和async关键字没有绑定关系。async只是语法糖,用来简化Promise的编写:它让你可以用await替代.then()链式调用,同时自动把函数返回值包装成Promise。如果你已经手动用Promise.resolve()处理了返回值,就不需要再用async多做一层包装。
总结:加不加async取决于你的实际需求——如果需要使用await、或者为未来的异步逻辑留扩展空间,就加;如果只是单纯返回一个resolved的Promise,不加也完全可行,两者功能等价。
内容的提问来源于stack exchange,提问作者Azm

