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

向Promise.all传入undefined是否属于JavaScript定义的合法行为?

向Promise.all传入undefined是否属于JavaScript定义的合法行为?

嘿,这个问题问得很接地气!先给你一个明确的结论:向Promise.all传入undefined是完全符合JavaScript规范的定义行为,你不用担心在不同浏览器环境下出现不一致的问题~

咱们来拆解一下为什么可以这么做:
Promise.all的核心逻辑是接收一个可迭代对象(比如你用的数组),然后会对里面的每一个元素执行Promise.resolve()处理。当你传入undefined时,Promise.resolve(undefined)会返回一个立刻处于已决议状态的Promise,它的决议值就是undefined。

对应到你实际的场景里:

const isAuthenticated = ...

const [resultA, resultB] = await Promise.all([
  fetchSomeData(),
  isAuthenticated ? fetchDataRequiringAuthentication() : undefined
])

当isAuthenticated为false时,第二个元素是undefined,Promise.all会自动把它转换成一个已决议的Promise,最终resultB的值就是undefined,完全符合你“未认证时不执行该请求,结果置为undefined”的需求。

其实不止undefined,你往Promise.all里传入任何非Promise类型的值(比如字符串、数字、普通对象),都会被自动包装成已决议的Promise,这都是规范里明确规定的行为,所以Chrome和Firefox里能正常工作,其他遵循规范的JavaScript环境(比如Node.js)也都能正常运行。

备注:内容来源于stack exchange,提问作者Pascal Will

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:09:30