You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何使用Promise.allSettled并行调用findOne查询用户

解决方案

核心实现逻辑:先整理所有需要查询的参数为数组,批量生成对应的findOne Promise实例,再传入Promise.allSettled即可实现并行执行,所有请求会在2秒后统一返回结果,不需要逐个等待。

完整修改后可运行代码

const findOne = (list, { key, value }) => {  
    return new Promise ((resolve, reject) => {  
        const element = list.find(element => element[key] === value); 
        
        setTimeout(() => {  
            element 
            ? resolve(element.name) 
            :reject(new Error('ERROR: Element not found')); 
        }, 2000); 
    });
  }
  
  const users = [  
  {
    name: 'Carlos', 
    rol: 'Teacher' 
  },
  {
    name: 'Ana', 
    rol: 'Boss' 
  }
  ];


console.log('批量并行查询用户开始'); 

async function fetchData(){ 
  // 1. 整理所有需要查询的条件,可按需增删
  const queryList = [
    { key: 'name', value: 'Carlos' },
    { key: 'name', value: 'Ana' },
    { key: 'name', value: 'Bob' } // 不存在的用户,用于演示失败场景
  ]
  // 2. 批量生成findOne Promise实例数组
  const promiseList = queryList.map(query => findOne(users, query))
  // 3. 传入allSettled并行执行所有查询
  const results = await Promise.allSettled(promiseList)
  
  // 4. 遍历处理每个查询结果
  results.forEach((result, index) => {
    const currentQuery = queryList[index]
    if (result.status === 'fulfilled') {
      console.log(`查询【${currentQuery.value}】成功:user: ${result.value}`)
    } else {
      console.log(`查询【${currentQuery.value}】失败:${result.reason.message}`)
    }
  })
}

fetchData();

说明

  • 返回的结果数组顺序和你传入的查询条件顺序完全对应,不会因为执行速度快慢打乱顺序
  • 如果你需要只要有一个查询失败就终止所有处理,可以把Promise.allSettled替换为Promise.all,但如果需要拿到每个查询的独立结果,allSettled更适配需求
  • 可任意调整queryList内的查询条件,没有数量限制,所有查询都会并行执行,总耗时固定为2秒,不会随查询数量增加而累加

内容的提问来源于stack exchange,提问作者A.Baes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:39:00