我使用前面问题中建议的承诺从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]
。
为什么会发生这种情况,我该如何修复它?
您的回调是异步的,因此,除非您使用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);
});