我正在使用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();
}
答案 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();
}