【发布时间】:2019-02-07 22:39:27
【问题描述】:
每次我向 Google API 请求距离时,我都会创建一个新的 Promise。我希望所有的 Promise 都解决,然后调用 ABCD 函数?现在它立即调用 ABCD 函数。
async function RunBookings(Records) {
for (var k = 0; k < gDestinationsArray.length; k++) {
console.log('k' + k);
let promise = new Promise(function(resolve, reject) {
console.log('new Promise');
var DistanceService = new google.maps.DistanceMatrixService();
DistanceService.getDistanceMatrix({
origins: gOriginsArray[k],
destinations: gDestinationsArray[k],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
console.log(response);
var results = response.rows[0].elements; //console.log(results );
for (var l = 0; l < results.length; l++) {
gDistanceArray.push(results[l].distance.text);
}
setTimeout(function() {
resolve('Good promise');
}, 10000);
} else if (status === google.maps.DirectionsStatus.OVER_QUERY_LIMIT) {
console.log('OVER_QUERY_LIMIT');
console.log(response);
console.log(status);
reject(Error("Bad promise"));
} else {
console.log('BAD');
console.log(response);
console.log(status);
reject(new Error("Bad promise"));
}
});
});
let result = await promise;
}
}
function ABCD() {
}
RunBookings(Records);
ABCD();
【问题讨论】:
-
RunBookings(Records).finally(ABCD)可以。 -
似乎你没有从函数的for循环中返回promise本身的响应。除非我错过了什么。当您调用 runbooking 时,它只会处理信息。没有返回任何内容
-
@divyanshch
async functions 总是隐式返回一个承诺。 -
这是有道理的,即使在这种情况下,虽然没有返回任何值,所以你只会得到一个返回的 void 承诺
-
没错,但它仍然可以作为处理完成的指示。
标签: javascript asynchronous promise async-await