https://github.com/delight-rpc/long-running-procedure
🌿
https://github.com/delight-rpc/long-running-procedure
browser esm library nodejs npm-package typescript
Last synced: 12 months ago
JSON representation
🌿
- Host: GitHub
- URL: https://github.com/delight-rpc/long-running-procedure
- Owner: delight-rpc
- License: mit
- Created: 2023-03-18T05:58:03.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2025-06-21T09:00:36.000Z (about 1 year ago)
- Last Synced: 2025-06-21T09:03:19.193Z (about 1 year ago)
- Topics: browser, esm, library, nodejs, npm-package, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/@delight-rpc/long-running-procedure
- Size: 312 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# long-running-procedure
## Install
```sh
npm install --save @delight-rpc/long-running-procedure
# or
yarn add @delight-rpc/long-running-procedure
```
## API
```ts
enum CallState {
Pending
, Settled
}
interface ILongRunningProcedure {
/**
* 调用此过程.
*
* @returns 该调用的id.
*/
call(args: Args): Awaitable
/**
* 中断一个还未完成的调用.
* 如果该调用已经完成或调用不存在, 该函数会静默失败.
*/
abort(id: string): Awaitable
/**
* 返回调用的状态.
*
* @throws {CallNotFound}
*/
getState(id: string): Awaitable
/**
* 获取调用的结果, 如果调用尚未完成, 则会阻塞直到完成.
*
* @throws {CallNotFound}
*/
getResult(id: string): Awaitable
/**
* 删除一个已经完成的调用, 这会导致与该调用相关的信息被删除.
* 如果该调用还未完成, 则该操作会抛出错误.
* 如果该调用已经删除, 则该操作会静默失败.
*/
remove(id: string): Awaitable
}
class CallNotFound extends CustomError {}
```
### LongRunningProcedure
```ts
class LongRunningProcedure
implements ILongRunningProcedure {
/**
* 超时和TTL的存在是为了减缓错误的实现耗尽存储空间的速度.
*
* @param timeout 调用的超时时间(毫秒), 超时的调用会被自动中断.
* @param timeToLive 调用从完成开始计算的存活时间(毫秒), 超出存活时间的调用会被删除.
*/
constructor(
procedure: (...args: [...Args, AbortSignal]) => PromiseLike
, options?: {
store?: Store
timeout?: number
timeToLive?: number
}
)
}
```
### Caller
```ts
interface ILongRunningProcedureCaller {
call(...args: [...args: Args, signal: AbortSignal]): Promise
}
```
#### LongRunningProcedureCaller
```ts
/**
* 以长连接方式接收长时运行过程的结果, 结果会尽快返回.
* 请注意, 在一些信道上维持长连接需要付出成本.
*/
class LongRunningProcedureCaller
implements ILongRunningProcedureCaller {
constructor(procedure: ILongRunningProcedure)
}
```
#### LongRunningProcedurePollingCaller
```ts
/**
* 以轮询方式接收长时运行过程的结果, 这无法尽快返回结果.
* 请注意, 视轮询间隔, 可能会造成很多被浪费的请求.
*/
class LongRunningProcedurePollingCaller
implements ILongRunningProcedureCaller {
constructor(
procedure: ILongRunningProcedure
, pollingInterval: number
)
}
```
### Store
```ts
enum StoreItemState {
Pending
, Resolved
, Rejected
}
interface Store {
set(
id: string
, value:
| [StoreItemState.Pending]
| [StoreItemState.Resolved, Result]
| [StoreItemState.Rejected, Error]
, timeToLive?: number
): Awaitable
get(id: string): Awaitable>
delete(id: string): Awaitable
}
```
#### MemoryStore
```ts
class MemoryStore implements Store {}
```