获取静态函数以返回异步值
Posted
技术标签:
【中文标题】获取静态函数以返回异步值【英文标题】:get static function to return async value 【发布时间】:2021-01-09 12:01:38 【问题描述】:我想要一个静态 ES6 方法来简单地返回一个值而不是一个承诺。这就是我想要做的。
export default class Member
static existingMember()
var _existingMember;
// DB.findExistingMember() -> returns a promise
DB.findExistingMember().then(member =>
_existingMember = member
)
return _existingMember
// in mocha test
describe('some test', function () =>
const member = Member.existingMember()
it('has access to member', function() =>
// I want member to be available here instead of having to do member.then()
console.log(member)
foo.someFunction(member)
bar.someFunction(member)
)
)
【问题讨论】:
在您希望返回的变量_existingMember
的值设置为异步的情况下,您如何看待这可能?
@Mitya 在设置点then
内,值没有解析吗?
是的——但是到那时你的静态方法已经完成了它的流程并返回了一个值为 undefined 的变量。直到稍后异步流程完成时才分配其值。
@Mitya 这正是我要解决的问题。有没有办法设置existingMember
以在没有async-await
的情况下从承诺内部返回值?
不 - 这是一个矛盾。除非您使用生成器之类的东西做一些花哨的事情,否则函数只会同步返回一个值。否则,承诺(其中async-await
是一个抽象)或至少某种形式的回调是您唯一的途径。
【参考方案1】:
您可以在 Member.existingMember
函数上使用 await 以将您的 member
用作普通变量
export default class Member
static existingMember()
return DB.findExistingMember();
// in mocha test
describe('some test', function ()
it('has access to member', async function ()
const member = await Member.existingMember()
console.log(member)
foo.someFunction(member)
bar.someFunction(member)
)
)
【讨论】:
以上是关于获取静态函数以返回异步值的主要内容,如果未能解决你的问题,请参考以下文章
简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)
Kotlin 协程Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )
Kotlin 协程Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )
Kotlin 协程Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )