Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
b28f68ae
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b28f68ae
编写于
3月 23, 2017
作者:
J
Jacob Schatz
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'add-stop-to-polling' into 'master'
Adds stop function so we can stop polling anytime See merge request !10191
上级
0115bb4b
70e59559
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
52 addition
and
5 deletion
+52
-5
app/assets/javascripts/lib/utils/poll.js
app/assets/javascripts/lib/utils/poll.js
+16
-5
spec/javascripts/lib/utils/poll_spec.js
spec/javascripts/lib/utils/poll_spec.js
+36
-0
未找到文件。
app/assets/javascripts/lib/utils/poll.js
浏览文件 @
b28f68ae
...
...
@@ -36,20 +36,21 @@ export default class Poll {
this
.
options
.
data
=
options
.
data
||
{};
this
.
intervalHeader
=
'
POLL-INTERVAL
'
;
this
.
timeoutID
=
null
;
this
.
canPoll
=
true
;
}
checkConditions
(
response
)
{
const
headers
=
gl
.
utils
.
normalizeHeaders
(
response
.
headers
);
const
pollInterval
=
headers
[
this
.
intervalHeader
];
if
(
pollInterval
>
0
&&
response
.
status
===
httpStatusCodes
.
OK
)
{
this
.
options
.
successCallback
(
response
);
setTimeout
(()
=>
{
if
(
pollInterval
>
0
&&
response
.
status
===
httpStatusCodes
.
OK
&&
this
.
canPoll
)
{
this
.
timeoutID
=
setTimeout
(()
=>
{
this
.
makeRequest
();
},
pollInterval
);
}
else
{
this
.
options
.
successCallback
(
response
);
}
this
.
options
.
successCallback
(
response
);
}
makeRequest
()
{
...
...
@@ -59,4 +60,14 @@ export default class Poll {
.
then
(
response
=>
this
.
checkConditions
(
response
))
.
catch
(
error
=>
errorCallback
(
error
));
}
/**
* Stops the polling recursive chain
* and guarantees if the timeout is already running it won't make another request by
* cancelling the previously established timeout.
*/
stop
()
{
this
.
canPoll
=
false
;
clearTimeout
(
this
.
timeoutID
);
}
}
spec/javascripts/lib/utils/poll_spec.js
浏览文件 @
b28f68ae
...
...
@@ -124,4 +124,40 @@ describe('Poll', () => {
Vue
.
http
.
interceptors
=
_
.
without
(
Vue
.
http
.
interceptors
,
pollInterceptor
);
});
describe
(
'
stop
'
,
()
=>
{
it
(
'
stops polling when method is called
'
,
(
done
)
=>
{
const
pollInterceptor
=
(
request
,
next
)
=>
{
next
(
request
.
respondWith
(
JSON
.
stringify
([]),
{
status
:
200
,
headers
:
{
'
poll-interval
'
:
2
}
}));
};
Vue
.
http
.
interceptors
.
push
(
pollInterceptor
);
const
service
=
new
ServiceMock
(
'
endpoint
'
);
spyOn
(
service
,
'
fetch
'
).
and
.
callThrough
();
const
Polling
=
new
Poll
({
resource
:
service
,
method
:
'
fetch
'
,
data
:
{
page
:
1
},
successCallback
:
()
=>
{
Polling
.
stop
();
},
errorCallback
:
callbacks
.
error
,
});
spyOn
(
Polling
,
'
stop
'
).
and
.
callThrough
();
Polling
.
makeRequest
();
setTimeout
(()
=>
{
expect
(
service
.
fetch
.
calls
.
count
()).
toEqual
(
1
);
expect
(
service
.
fetch
).
toHaveBeenCalledWith
({
page
:
1
});
expect
(
Polling
.
stop
).
toHaveBeenCalled
();
done
();
},
100
);
Vue
.
http
.
interceptors
=
_
.
without
(
Vue
.
http
.
interceptors
,
pollInterceptor
);
});
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录