我试图在循环内进行两次 Web API 调用,然后等到 webAPI 返回,然后再将返回的值作为子数组推送到更大的数组中。这是我的代码:
var latlngPairs = [];
function extractLatLongPairs(jsonobj){
for(var i = 0; i<10; i++){
let promises = [googlePlace(jsonobj[i]['From LID']), googlePlace(jsonobj[i]['To LID'])];
Promise.all(promises).then((results) => {
var temp2 = [results[0], results[1]];
latlngPairs.push(temp2);
console.log(latlngPairs);
});
}
}
在 Promise 中调用的 googlePlace 函数:
function googlePlace(airport){
https.get('https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=' + airport + '&inputtype=textquery&fields=geometry', (resp) => {
let data = '';
// A chunk of data has been recieved.
resp.on('data', (chunk) => {
data += chunk;
});
//All data is returned
resp.on('end', () => {
data = JSON.parse(data);
let obj = {
name: airport,
location: data.candidates[0].geometry.location
};
console.log('latlong should print after this');
return Promise.resolve(obj);
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}
我期待 console.log('latlong should print after this') 在打印 latlngPairs 之前打印出来。因为顺序相反,所以 latlngPairs 填充有未定义值的子数组。输出类似于:
[
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ],
[ undefined, undefined ]
]
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
latlong should print after this
需要明确的是,我想要实现的顺序是'latlong 应该在此之后打印'然后'[[obj,obj],[obj,obj]]。我想我一定对 promise.all 的工作方式有一些基本的误解,任何帮助都将不胜感激!