Javascript 如何从promise返回两个结果

Javascript 如何从promise返回两个结果,javascript,promise,Javascript,Promise,我使用fetch从两个不同的api:s获取数据。我需要在同一个函数中使用这两个api数据。一个完成得比另一个快得多,所以为了完成这项工作,我使用了promise.all。但现在我有两个问题 如何将2个结果(test1和test2)返回给下一个承诺?现在,我的代码停止并说“test1未定义” 如果我使用promise.all,然后在每个文件上运行.json(如下面的代码),那么代码会在返回结果之前等待每个json完成吗?或者一个人不能完成 代码: 您可以返回一个承诺。在中对两个.json调用的所有

我使用fetch从两个不同的api:s获取数据。我需要在同一个函数中使用这两个api数据。一个完成得比另一个快得多,所以为了完成这项工作,我使用了promise.all。但现在我有两个问题

  • 如何将2个结果(test1和test2)返回给下一个承诺?现在,我的代码停止并说“test1未定义”

  • 如果我使用promise.all,然后在每个文件上运行.json(如下面的代码),那么代码会在返回结果之前等待每个json完成吗?或者一个人不能完成

  • 代码:


    您可以返回一个
    承诺。在
    中对两个
    .json
    调用的所有
    。然后

    Promise.all([fetch1, fetch2])
        .then((file) => {
          let test1 = file[0].json()
          let test2 = file[1].json()
          return Promise.all([test1, test2])
        }).then(([test1, test2]) => {
          console.log(test1)
          console.log(test2)
        })
    
    但是最好将
    fetch
    请求和
    .map
    请求映射到它们的
    .json()
    承诺,然后调用
    Promise。结果中的所有

    const getApi = url => fetch(url).then(res => res.json());
    Promise.all([
      getApi('url1'),
      getApi('url2')
    ])
      .then(([test1, test2]) => {
        // do stuff with test1 and test2
      })
      .catch((err) => {
        // handle errors
      });
    
    上述代码将导致并行处理请求;两个请求都不会阻止另一个请求继续。相反,您的(经过调整的)原始代码将要求在两个请求的
    .json()
    (处理正文)启动之前接收和处理两个请求的响应头。

    将每个结果推送到一个数组中?
    
    const getApi = url => fetch(url).then(res => res.json());
    Promise.all([
      getApi('url1'),
      getApi('url2')
    ])
      .then(([test1, test2]) => {
        // do stuff with test1 and test2
      })
      .catch((err) => {
        // handle errors
      });