【发布时间】:2018-06-03 07:54:47
【问题描述】:
我使用一个名为 setConf 的函数进行测试。有时候如果我可以用它来启动一个promise链真的很方便,有时候我只需要它来返回值。
是否可以将现有函数声明为异步?我想做但不起作用的是:
const setConf = (conf) => {
mainConf = Object.assign(mainConf , conf)
return mainConf
}
module.exports.asyncSetConf = async setConf
module.exports.setConf = setConf
这是我目前拥有的
exports.asyncSetConf = async (conf) => {
mainConf = Object.assign(mainConf , conf)
return mainConf
}
exports.setConf = (conf) => {
mainConf = Object.assign(mainConf , conf)
return mainConf
}
代码是一样的,不能重构似乎有点傻
【问题讨论】:
-
将同步执行的函数设为异步函数没有任何价值。但是,您可以通过创建一个在下一次报价时调用该函数的新函数来做到这一点。
-
@KevinB 我认为这只是一个例子。我认为异步的用例是隐含的
-
afaik 您无法将现有函数转换为异步函数。但没有什么能阻止您创建新功能
-
“是否可以将现有函数声明为异步函数?” 不可以。异步函数是返回承诺的函数。如果你需要一个承诺,你可以简单地做
Promise.resolve(someExistingFunction())。如果你想使用await,你已经可以这样做了:await someExistingFunction()(不管someExistingFunction返回什么。 -
如果你想用它开始一个承诺链,那么就这样做:
Promise.resolve(setConf(...)).then(...)。不需要async版本。
标签: javascript ecmascript-6 async-await