Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在一个间隔内停止对函数的多次调用?_Javascript_Angularjs_Typescript_Angular Ui Router - Fatal编程技术网

Javascript 如何在一个间隔内停止对函数的多次调用?

Javascript 如何在一个间隔内停止对函数的多次调用?,javascript,angularjs,typescript,angular-ui-router,Javascript,Angularjs,Typescript,Angular Ui Router,如何确保在一个时间间隔内一次调用一个函数可以同时运行 我的代码如下所示: var promisePutTestQuestion; onEnter: ['$interval', 'questionService', ($interval, qus: IQuestionService) => { promisePutTestQuestion = $interval(() => { qus.putTestQuestionRes

如何确保在一个时间间隔内一次调用一个函数可以同时运行

我的代码如下所示:

var promisePutTestQuestion;

   onEnter: ['$interval', 'questionService',
             ($interval, qus: IQuestionService) => {
      promisePutTestQuestion = $interval(() => {
         qus.putTestQuestionResponses();
      }, 5 * 1000);
   }],
   onExit: ['$interval',
            ($interval) => {
             $interval.cancel(promisePutTestQuestion);             
   }],
我遇到的问题是,如果putTestQuestionResponse(返回承诺)很慢,那么我会一个接一个地调用多个putTestQuestionResponse函数


如果有人对此有任何想法,我将不胜感激。感谢在javascript中使用状态变量是安全的。每当
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);
}]
我不确定您使用的是什么promise框架,但是
()=>processing=false
应该在
finally()
中,我猜是$q,然后在
中,它应该在
catch
之后,以确保它在任何情况下都被执行。 因此,其中一个:

qus.putTestQuestionResponses().finally(() => processing = false)

甚至

qus.putTestQuestionResponses().then(() => processing = false).catch(() => processing = false)

qus.putTestQuestionResponses
做什么?它是一个返回承诺的函数
qus.putTestQuestionResponses().then(() => processing = false).catch(() => processing = false)