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

JavaScript fetch场景下如何将首个函数内的multi数组传入第三个函数

传值逻辑的核心问题

当前代码无法把multi数组传到第三个函数,本质是三个基础问题没解决:

  • updateScegliFilm内部的fetch是异步操作,当前代码没有把完整的Promise链作为函数返回值,内部then分支里return multi的结果根本没法传到函数外部
  • multi是updateScegliFilm内部的局部变量,作用域仅限函数内部,外部函数无法直接访问
  • 参数传递方向完全倒置:现有代码设计是让tendina把multi传给上游的updateScegliFilm,但实际上multi是updateScegliFilm执行后生成的结果,根本不可能从下游反向传给上游
  • 每次调用updateScegliFilm时都会重新初始化一个空的multi数组,就算把返回值抛出去,也只是单次请求对应的临时结果,无法形成连续的数组积累
符合你函数定位的传值实现

严格按照三个函数的职责流转值:第一个函数负责生成multi数组,第二个函数作为中转承接值,第三个函数接收值做后续处理,参考实现代码如下:

// 若需要跨多次请求累计multi数组,将变量定义在公共作用域,避免每次函数调用都被重置为空
const multi = [];

// 1. 第一个函数:拉取电影数据,更新multi数组,并把multi作为返回值向外抛出
async function updateScegliFilm(film) {
  const url1 = "https://api.themovie.org/search/movie?api_key=" + key + "&query=" + film;
  const response = await fetch(url1);
  const json = await response.json();
  const idFilmElenco = json['id'];
  const titleFilm = json['title'];
  const output = [idFilmElenco, titleFilm];
  multi.push(output);
  // 直接把multi数组作为函数返回值传递给下游
  return multi;
}

// 2. 第二个中介函数:接住第一个函数返回的multi值,再传递给第三个函数
async function gestioneElenco(filmList) {
  for (const film of filmList) {
    // 等待第一个函数执行完成,拿到返回的multi数组
    const receivedMulti = await updateScegliFilm(film);
    // 将multi数组作为参数传给第三个函数
    tendina(film, receivedMulti);
  }
}

// 3. 第三个函数:直接接收上游链路传递过来的multi数组做后续处理
function tendina(film, receivedMulti) {
  // 此处可直接操作拿到的multi数组
  alert(receivedMulti);
}
实现注意事项
  • 所有涉及异步获取数据的环节,必须通过async/await或者Promise链式调用接住返回值,不能用同步逻辑直接拿异步生成的变量
  • 传值方向要顺着调用链走:上游函数生成的结果,通过返回值向外传递,下游函数通过参数接收,不要反向要求下游给上游传本该由上游生成的变量
  • 如果不需要跨请求累计multi数组,仅需要单次请求的结果,可把multi的初始化放回updateScegliFilm函数内部,每次调用生成独立的数组返回即可,不需要提到公共作用域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 13:24:04