如何按顺序执行承诺并返回所有结果[重复]

Posted

技术标签:

【中文标题】如何按顺序执行承诺并返回所有结果[重复]【英文标题】:How to execute promises in order and return all results [duplicate] 【发布时间】:2019-10-11 07:30:01 【问题描述】:

我不熟悉承诺。我已经按顺序查找了执行 Promise 的示例,但没有找到与我的应用程序类似的示例。

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

我能够创建一个函数 doWork(),但问题是它所做的只是按顺序解析 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】:

尝试使用异步函数并在 for...of 循环中迭代承诺:

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

【讨论】:

以上是关于如何按顺序执行承诺并返回所有结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

承诺按顺序运行嵌套承诺并在第一次拒绝时解决

复杂承诺返回链中的承诺 catch() 顺序

.net core多个重复任务执行顺序

按给定列表的顺序选择重复的熊猫数据框行并保留原始索引

sql 如何过滤重复记录

如何删除列表中重复的构造对象,同时保留顺序并在飞镖中返回列表?