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

如何在Lodash的find方法中使用async/await?为何条件不满足仍返回匹配项?

问题原因

Lodash的find是同步方法,它不会处理异步回调函数。你传入的async (item) => {...}会返回一个Promise对象,而在JavaScript里,Promise属于“真值”(truthy)——不管内部最终resolve成true还是false,这个Promise本身在判断时都会被当成true。所以find会直接把数组的第一个元素判定为匹配项返回,完全不会等你的await someFunction()执行完毕。

解决办法

要处理异步逻辑的查找,别用Lodash的同步find,改用原生的异步遍历方式,比如for...of循环:

let isTravelerActiveChannelVac = false;
for (const item of array) {
  const isInputEnabled = await someFunction();
  if (item && isInputEnabled) {
    isTravelerActiveChannelVac = true;
    break; // 找到匹配项就停止遍历
  }
}

如果想要类似Lodash的批量处理写法,也可以用Promise.all先处理所有异步判断,再用原生方法校验:

const results = await Promise.all(
  array.map(async (item) => {
    const isInputEnabled = await someFunction();
    return item && isInputEnabled;
  })
);
const isTravelerActiveChannelVac = results.some(Boolean);

不过这种方式会遍历整个数组并执行所有的someFunction(),不像for...of可以中途终止遍历,所以如果数组很大或者someFunction()是耗时操作,优先选第一种方案。

内容的提问来源于stack exchange,提问作者Saket Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:24:44