2017-04-11 96 views
-5

我想等到承诺完成后再继续执行for循环。请看下面的类似代码。现在,循环将运行多次并运行所有的承诺,但这不适合我的应用程序。我需要程序运行while循环,运行promise,等到解析完成,检查10秒是否已经通过,或者已经设置了用户变量,如果没有,再次运行。如何等到承诺完成后才继续循环

var p = promiseReturnedFromAFunction(); 
var time = new Date().getTime(); 
var user = 'undefined'; 
while(user === 'undefined' && Math.abs(time - new Date().getTime()) < 10000) { 
    p.then(() => { 
     if(somecondition) { 
       user='user'; 
       break; 
     } 
    }) 
    //Code should wait here until the above promise is done before continuing 
} 

如果有人可以帮助我,这将不胜感激。

+0

你可以把你的代码放在回调里面吗? –

+0

你能详细解释一下吗?我应该在哪里放置什么代码? – AllAnimals

+0

p.then(()=> {if(somecondition){}/*把你的代码放在这里* /})//不在这里) –

回答

-1
var p = promiseReturnedFromAFunction(); 
var time = new Date().getTime(); 
var user = 'undefined'; 

p.then(() => { 
    while(user === 'undefined' && Math.abs(time - new Date().getTime()) < 10000) { 
     if(somecondition) { 
       user='user'; 
       break; 
     } 
    } 
}); 

我想你已经倒过来了。你想等待承诺解决,然后循环你的条件检查,以确保用户设置或时间已过。

+0

如果用户和时间条件不符合,我将如何从该函数内再次调用p? – AllAnimals

+0

为什么你需要再次运行p?您只需运行循环并检查当时的其他条件。 –

+0

承诺的值可能随时间而改变。这就是为什么我需要再次检查 – AllAnimals

-1

我不清楚你想达到的目标是什么。是否试图确定一个值,如果不能,每X秒重试一次?每X秒刷新一次数值?

我可以给出的唯一直接的建议是,一旦你必须等待承诺,你一般需要/希望继续与其他承诺并解决。你不想试图“阻止”承诺,打破它。所以你要么解决p,然后在解决方案中循环,或者你应该反转一下逻辑,并写一个循环,检查somecondition并且只有在确实如此时才解决p