如何顺序执行承诺并返回所有结果

时间:2019-05-24 17:13:09

标签: javascript promise es6-promise

我是新来的诺言。我查找了按顺序执行Promise的示例,但没有找到与我的应用程序相似的示例。

我的问题是我想按一定顺序解决承诺,但要在解决承诺时捕获所有结果。通过查找示例。我已经创建了该问题的简化版本。

我能够创建一个函数doWork(),但问题是它所做的只是按顺序解决promise,而没有捕获结果。

理想情况下,我希望有一个函数返回一个可以解决所有结果的promise。

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Test</title>
   <script>
      function getRandomInterval(min, max){
         var random = Math.random() * (+max - +min) + +min;
         return random;
      }

      function createPromiseReturningFn(input){
         return function(){
            return new Promise(
               function(resolve, reject){
                  setTimeout(function(){
                     // console.log(input);
                     resolve(input);
                  }, getRandomInterval(0, 100));
               }
            );
         }
      }

      var promises = [];

      for (var i=0; i<10; i++){
         promises.push(createPromiseReturningFn(i));
      }

      function doWork(){
         if (!promises.length)
            return;
         var promise = promises.shift();
         promise().then(
            doWork
         );
      }

      doWork();
   </script>
</head>
<body>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

尝试使用异步函数并在for ... of循环中遍历Promise:

Resolve promises one after another (i.e. in sequence)?