Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
deno
提交
5a8ba3b1
D
deno
项目概览
张重言
/
deno
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
deno
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
5a8ba3b1
编写于
2月 07, 2020
作者:
Y
Yoshiya Hinosawa
提交者:
GitHub
2月 07, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: add std/signal/mod.ts (#3913)
上级
d9c84eb9
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
87 addition
and
4 deletion
+87
-4
cli/js/lib.deno.ns.d.ts
cli/js/lib.deno.ns.d.ts
+3
-2
cli/js/signals.ts
cli/js/signals.ts
+3
-2
std/signal/mod.ts
std/signal/mod.ts
+28
-0
std/signal/test.ts
std/signal/test.ts
+53
-0
未找到文件。
cli/js/lib.deno.ns.d.ts
浏览文件 @
5a8ba3b1
...
...
@@ -2146,14 +2146,15 @@ declare namespace Deno {
* SignalStream represents the stream of signals, implements both
* AsyncIterator and PromiseLike
*/
export
class
SignalStream
implements
AsyncIterator
<
void
>
,
PromiseLike
<
void
>
{
export
class
SignalStream
implements
AsyncIterableIterator
<
void
>
,
PromiseLike
<
void
>
{
constructor
(
signal
:
typeof
Deno
.
Signal
);
then
<
T
,
S
>
(
f
:
(
v
:
void
)
=>
T
|
Promise
<
T
>
,
g
?:
(
v
:
void
)
=>
S
|
Promise
<
S
>
):
Promise
<
T
|
S
>
;
next
():
Promise
<
IteratorResult
<
void
>>
;
[
Symbol
.
asyncIterator
]():
AsyncIterator
<
void
>
;
[
Symbol
.
asyncIterator
]():
AsyncItera
bleItera
tor
<
void
>
;
dispose
():
void
;
}
...
...
cli/js/signals.ts
浏览文件 @
5a8ba3b1
...
...
@@ -96,7 +96,8 @@ export const signals = {
/** SignalStream represents the stream of signals, implements both
* AsyncIterator and PromiseLike */
export
class
SignalStream
implements
AsyncIterator
<
void
>
,
PromiseLike
<
void
>
{
export
class
SignalStream
implements
AsyncIterableIterator
<
void
>
,
PromiseLike
<
void
>
{
private
rid
:
number
;
/** The promise of polling the signal,
* resolves with false when it receives signal,
...
...
@@ -134,7 +135,7 @@ export class SignalStream implements AsyncIterator<void>, PromiseLike<void> {
return
{
done
:
await
this
.
pollingPromise
,
value
:
undefined
};
}
[
Symbol
.
asyncIterator
]():
AsyncIterator
<
void
>
{
[
Symbol
.
asyncIterator
]():
AsyncItera
bleItera
tor
<
void
>
{
return
this
;
}
...
...
std/signal/mod.ts
0 → 100644
浏览文件 @
5a8ba3b1
import
{
MuxAsyncIterator
}
from
"
../util/async.ts
"
;
export
function
signal
(
...
signos
:
[
number
,
...
number
[]]
):
AsyncIterable
<
void
>
&
{
dispose
:
()
=>
void
}
{
const
mux
=
new
MuxAsyncIterator
<
void
>
();
if
(
signos
.
length
<
1
)
{
throw
new
Error
(
"
No signals are given. You need to specify at least one signal to create a signal stream.
"
);
}
const
streams
=
signos
.
map
(
Deno
.
signal
);
streams
.
forEach
(
stream
=>
{
mux
.
add
(
stream
);
});
// Create dispose method for the muxer of signal streams.
const
dispose
=
():
void
=>
{
streams
.
forEach
(
stream
=>
{
stream
.
dispose
();
});
};
return
Object
.
assign
(
mux
,
{
dispose
});
}
std/signal/test.ts
0 → 100644
浏览文件 @
5a8ba3b1
import
{
test
,
assertEquals
,
assertThrows
}
from
"
../testing/mod.ts
"
;
import
{
delay
}
from
"
../util/async.ts
"
;
import
{
signal
}
from
"
./mod.ts
"
;
if
(
Deno
.
build
.
os
!==
"
win
"
)
{
test
(
"
signal() throws when called with empty signals
"
,
():
void
=>
{
assertThrows
(
()
=>
{
// @ts-ignore
signal
();
},
Error
,
"
No signals are given. You need to specify at least one signal to create a signal stream.
"
);
});
test
(
"
signal() iterates for multiple signals
"
,
async
():
Promise
<
void
>
=>
{
// This prevents the program from exiting.
const
t
=
setInterval
(()
=>
{},
1000
);
let
c
=
0
;
const
sig
=
signal
(
Deno
.
Signal
.
SIGUSR1
,
Deno
.
Signal
.
SIGUSR2
,
Deno
.
Signal
.
SIGINT
);
setTimeout
(
async
()
=>
{
await
delay
(
20
);
Deno
.
kill
(
Deno
.
pid
,
Deno
.
Signal
.
SIGINT
);
await
delay
(
20
);
Deno
.
kill
(
Deno
.
pid
,
Deno
.
Signal
.
SIGUSR2
);
await
delay
(
20
);
Deno
.
kill
(
Deno
.
pid
,
Deno
.
Signal
.
SIGUSR1
);
await
delay
(
20
);
Deno
.
kill
(
Deno
.
pid
,
Deno
.
Signal
.
SIGUSR2
);
await
delay
(
20
);
Deno
.
kill
(
Deno
.
pid
,
Deno
.
Signal
.
SIGUSR1
);
await
delay
(
20
);
Deno
.
kill
(
Deno
.
pid
,
Deno
.
Signal
.
SIGINT
);
await
delay
(
20
);
sig
.
dispose
();
});
for
await
(
const
_
of
sig
)
{
c
+=
1
;
}
assertEquals
(
c
,
6
);
clearTimeout
(
t
);
});
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录