在asyncio.asjavascript中,www.example.com _completed的等价物是什么?

dy1byipe  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(125)
  • Promise.all只在所有promise解析时解析,在第一个promise拒绝时拒绝
  • Promise.allSettled仅在所有promise都解决后才解析
  • Promise.any只解析第一个解析的promise,当所有的promise都被拒绝时,则拒绝
  • Promise.race使用与第一个要结算的promise相同的结果结算

JavaScript中的Promise似乎没有asyncio.as_completed的等价物,后者会按照它们的解决顺序产生Promises。

是否可以使用用户代码实现asyncio.as_completed的相同逻辑?

vfh0ocws

vfh0ocws1#

正如其他人所说,在JavaScript中,没有一个完全等同于Python的asyncio.as_completed()函数内置到语言或标准库中。但是,您可以使用JavaScript promise和Promise.allSettled()函数实现类似的行为。
下面是一个如何asyncio.as在JavaScript中模拟www.example.com _completed()行为的示例:

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function processTasks(tasks) {
  const results = [];

  const promises = tasks.map(async task => {
    await delay(task.delay);
    const result = await task.execute();
    results.push(result);
  });

  await Promise.allSettled(promises);

  return results;
}

// Usage example
const tasks = [
  { delay: 1000, execute: () => Promise.resolve('Task 1 completed') },
  { delay: 2000, execute: () => Promise.resolve('Task 2 completed') },
  { delay: 500, execute: () => Promise.resolve('Task 3 completed') },
];

processTasks(tasks)
  .then(results => {
    console.log('All tasks completed');
    console.log(results);
  })
  .catch(error => {
    console.error('An error occurred during task processing');
    console.error(error);
  });

在上面的代码中,delay()函数返回一个在指定毫秒数后解析的promise。这模拟异步延迟。execute()函数表示一个返回promise的异步任务。
processTasks()函数接受一个任务数组。它遍历任务,使用delay()函数引入延迟,异步执行每个任务,并将结果存储在结果数组中。
allSettled()函数用于等待所有的promise在没有短路的情况下解决(resolve或reject),类似于as_completed()。在所有promise都解决之后,返回results数组。
您可以使用自己的任务修改tasks数组,每个任务都包含一个delay属性和一个execute函数,该函数返回表示异步任务的promise。
我不会评论我的意见,如果你应该,因为你只问你是否可以,是的,你可以。

相关问题