我怎样才能确保一次调用一个函数的一次调用?
我的代码如下所示:
var promisePutTestQuestion;
onEnter: ['$interval', 'questionService',
($interval, qus: IQuestionService) => {
promisePutTestQuestion = $interval(() => {
qus.putTestQuestionResponses();
}, 5 * 1000);
}],
onExit: ['$interval',
($interval) => {
$interval.cancel(promisePutTestQuestion);
}],
我遇到的问题是如果putTestQuestionResponse(返回一个promise)很慢,那么我有一个接一个的多个putTestQuestionResponse函数调用。
如果有人对此有任何想法,我将不胜感激。感谢
答案 0 :(得分:1)
在javascript中,为此目的使用状态变量是安全的。每当var
操作花费大量时间,下次调用将被跳过。所以只需保持处理变量的正确状态,如果它是真的,则退出间隔回调而不再运行任务。
qus.putTestQuestionResponses
不确定您正在使用哪种承诺框架,但var promisePutTestQuestion;
let processing = false;
onEnter: ['$interval', 'questionService',
($interval, qus: IQuestionService) => {
promisePutTestQuestion = $interval(() => {
if (processing)
return;
processing = true;
qus.putTestQuestionResponses()
.then(() => processing = false)
}, 5 * 1000);
}],
onExit: ['$interval', ($interval) => {
$interval.cancel(promisePutTestQuestion);
}]
应该是() => processing = false
我想是$ q,而finally()
应该是then
之后catch
1}}以确保它在任何情况下都被执行。
所以其中之一:
qus.putTestQuestionResponses().finally(() => processing = false)
或
qus.putTestQuestionResponses().catch(...).then(() => processing = false)`
甚至
qus.putTestQuestionResponses().then(() => processing = false).catch(() => processing = false)