-
Notifications
You must be signed in to change notification settings - Fork 0
async.Class.StatefulRpc
@zenstone/ts-utils / async / StatefulRpc
Defined in: src/async/StatefulRpc.ts:92
有状态的 RPC 等待注册表。
对同一个 key 的多个并发调用方共享同一次异步结果:任意一方调用
resolve(key, result) 或 reject(key, error) 时,所有等待该 key
的 Promise 会同时被 settle。
每个 task 拥有独立的定时器。当任意一个 task 超时时,onTimeout 会
调用 settle(key),将该 key 下的所有 task 一并 reject(含尚未
超时的 task)。如需自定义超时逻辑,子类可覆盖 protected onTimeout。
const rpc = new StatefulRpc<UserProfile, { userId: string }>();
// 多个调用方等待同一个 key
const p1 = rpc.pending('user:42', { userId: '42' });
const p2 = rpc.pending('user:42', { userId: '42' });
// 外部拿到数据后 resolve,p1 和 p2 同时得到结果
rpc.resolve('user:42', profile);Result = object
Params = object
new StatefulRpc<
Result,Params>(__namedParameters?):StatefulRpc<Result,Params>
Defined in: src/async/StatefulRpc.ts:103
StatefulRpcOptions<Result, Params> = {}
StatefulRpc<Result, Params>
get id():
string
Defined in: src/async/StatefulRpc.ts:115
实例唯一 id
string
get timeout():
number
Defined in: src/async/StatefulRpc.ts:120
实例级默认超时毫秒数
number
abort(
key,reason?):this
Defined in: src/async/StatefulRpc.ts:258
以 RpcAbortError 中止指定 key 的所有 task。
string
资源标识
unknown
可选的中止原因,会附加到 RpcAbortError.reason
this
addPendingItem(
item):PendingItem<Result,Params>
Defined in: src/async/StatefulRpc.ts:149
Internal
将 item 写入 Map 并启动定时器
PendingItem<Result, Params>
PendingItem<Result, Params>
clear(
reason?):this
Defined in: src/async/StatefulRpc.ts:266
以 RpcAbortError 中止所有 key 下的全部 task。
通常在连接断开、组件卸载等场景下调用。
unknown
可选的中止原因
this
getPendingCount(
key?):number
Defined in: src/async/StatefulRpc.ts:128
返回当前挂起的 task 数量。
string
指定 key 时只统计该 key;省略时统计全部
number
newPendingItem(
key,params,rest):PendingItem<Result,Params>
Defined in: src/async/StatefulRpc.ts:136
Internal
创建 PendingItem,不写入 Map、不启动计时器
string
Params
Omit<PendingItem<Result, Params>, "task">
PendingItem<Result, Params>
protectedonTimeout(__namedParameters):void
Defined in: src/async/StatefulRpc.ts:169
task 超时时触发,默认行为:以 TimeoutError reject 整个 key 下的所有 task。
子类可覆盖此方法实现自定义超时策略(如只 reject 超时的单个 task)。
PendingItem<Result, Params>
void
pending(
key,params,timeout?):Promise<Result>
Defined in: src/async/StatefulRpc.ts:201
注册一个等待 key 结果的 Promise。
同一个 key 可以多次调用 pending();所有调用方会在同一次
settle() 时一起被 resolve 或 reject。
string
资源标识,与 resolve / reject / abort 对应
Params
本次请求的参数,会附加到 task 描述中
number
覆盖实例默认超时时间(毫秒)
Promise<Result>
reject(
key,result):this
Defined in: src/async/StatefulRpc.ts:250
reject 指定 key 的所有 task。
string
资源标识
unknown
错误原因
this
removePendingItem(
item):PendingItem<Result,Params>
Defined in: src/async/StatefulRpc.ts:178
Internal
从 Map 中移除 item 并清除其定时器
PendingItem<Result, Params>
PendingItem<Result, Params>
resolve(
key,result):this
Defined in: src/async/StatefulRpc.ts:242
resolve 指定 key 的所有 task。
string
资源标识
Result
返回值
this
settle(
settled):this
Defined in: src/async/StatefulRpc.ts:219
以指定的 settled 结果一次性 settle key 下的所有 task,
并触发对应事件。settle 后该 key 的所有 task 及定时器均被清除。
StatefulRpcSettled<Result>
this
this,支持链式调用