余烬并发,如何根据条件设置timout值

时间:2018-08-17 18:38:48

标签: ember.js concurrency ember-concurrency

我正在使用ember-concurrency,必须每10秒进行一次API调用,并更新应用程序安装阶段的设置状态。如果有错误,那么我需要将超时值设置为1秒,而不是将默认值设置为10秒。似乎每个超时值仅是10秒,即使有错误,用户在屏幕上停留10秒钟,然后看到错误模式。谁能说出可能的解决方案?还是我做错了什么?

induceWait: task(function*() {
  while (continue) {
   // make the api call here
   //if error in any evaluating conditons, set timeout value to be 1 seconds, else 10 seconds
   this.get('store').findAll('status').then((response) => {
     if (response.flag) {
        this.set('timeout', 10000);
     } else {
        this.set('timeout', 1000);
      }
   }, (error) => {

   });
   yield timeout(this.get('timeout');
   this.get('induceWait').perform();
}

1 个答案:

答案 0 :(得分:3)

我认为,问题的根源在于承诺本身必须兑现。 因此,当前正在发生的是诺言“开始”,然后您将产生一个超时,并且在诺言解决之前将timeout设置为任何值。

在此示例中,我使用了局部变量,并将名称更改为delayMs,以避免与timeout函数的命名冲突

induceWait: task(function*() {
  while (true) {

  let delayMs = 1000;

  const response = yield this.get('store').findAll('status');

  if (response.flag) {
    delayMs = 10000;
  } 

  yield timeout(delayMs);

  this.get('induceWait').perform();
}