提问者:小点点

从第一个获取数据。然后基于第二个条件。然后


我使用前面问题中建议的承诺从2个异步调用中获取值。

但我希望第一次通话的结果基于第二次通话的条件。 当我做我正在做的事情时,我总是变得不明确。 我怎样才能得到我想要的结果。

第一个JSON:

let first_json = [
    {
        "company": "one"
    },
    {
        "company": "two"
    },
    {
        "company": "three"
    }
]

第二个JSON依赖于第一个JSON,并且具有类似的格式。

用我所做的承诺:

$.getJSON(first_json)
 .then(first_data =>
      first_data.map(d => {
          return d.company;
      })
  )
 .then(promises => Promise.all(promises))
 .then(company => company.map(c => {
        let second_json = json_string + c;
        $.getJSON(second_json, function(data) {
            if (data.length > 0) return c;
        });
    }))
 .then(arr => {
     console.log(arr);
  });

对于我,arr应该返回['one','three'],但实际上返回的是:[undefined,undefined,undefined]

为什么会发生这种情况,我该如何修复它?


共1个答案

匿名用户

您的回调是异步的,因此,除非您使用then“等待”它,否则它不会立即对您可用,因此您不能基于它执行操作。

取而代之的是,这样做:

$.getJSON(first_json)
  .then(first_data =>
    first_data.map(d => {
      return d.company;
    })
  )
  .then(promises => Promise.all(promises))
  .then(company => company.map(c => {
    let second_json = json_string + c;
    return $.getJSON(second_json)
      .then(data => {
        if (data.length > 0) return c;
      });
  }))
  .then(promises => Promise.all(promises))
  .then(arr => {
    console.log(arr);
  });