如何等到承诺在继续循环之前完成

时间:2017-04-11 15:17:06

标签: javascript while-loop promise

我想等到承诺完成后再继续我的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
}

如果有人能帮助我,我们将不胜感激。

2 个答案:

答案 0 :(得分:-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;
         }
    }
});

我认为你倒了。您希望等待承诺解决,然后循环执行条件检查以确保用户已设置或时间已过。

答案 1 :(得分:-1)

我不清楚你想要实现的行为是什么。是否尝试确定一个值,如果不能,则每X秒重试一次?每隔X秒刷新一次值?

我能给出的唯一直接建议是,一旦你必须等待一个承诺,你通常需要/希望继续将其与其他承诺链接并解决。你不想试图“阻止”承诺打破它。所以你想要解析using (serverStream = new NetworkStream(mySocket)) { byte[] outStream = System.Text.Encoding.ASCII.GetBytes("help"); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); } 然后在解析中循环,或者你应该反转逻辑并编写一个循环来检查p并且只解析somecondition一次真。