[英]Javascript async/await in for loop
我有個問題
async function checkOk(listNotOkLocation) {
// console.log(listNotOkLocation)
var lenNotOk = listNotOkLocation.length
if (lenNotOk == 0) return 'green'
var latMarker = markerLocation.getPosition().lat()
var lngMarker = markerLocation.getPosition().lng()
var origin = latMarker.toString() + ", " + lngMarker.toString()
for (var i = 0; i < lenNotOk; i++) {
var lat = listNotOkLocation[i].lat
var lng = listNotOkLocation[i].lng
var destination = lat.toString() + ", " + lng.toString()
calcRoute(origin,destination, function (err, dist) {
console.log(1)
if (!err) {
if (dist <= minDistance)
return 'red'
}
});
}
console.log(2)
return 'green'
}
for循環中的calcRoute函數需要時間,因此checkOk函數始終返回“綠色”。 有人可以幫我解決這個問題嗎?
將您的calcRoute
包裝成可以返回承諾的內容
function calcRouteP(origin, destination) {
return new Promise((resolve, reject) => {
calcRoute(origin, destination, function (err, dist) {
if (err) {
reject(err);
} else {
resolve(dist);
}
});
});
}
然后在異步功能中使用它
async function checkOk(listNotOkLocation) {
// console.log(listNotOkLocation)
var lenNotOk = listNotOkLocation.length
if (lenNotOk == 0) return 'green'
var latMarker = markerLocation.getPosition().lat()
var lngMarker = markerLocation.getPosition().lng()
var origin = latMarker.toString() + ", " + lngMarker.toString()
for (var i = 0; i < lenNotOk; i++) {
var lat = listNotOkLocation[i].lat
var lng = listNotOkLocation[i].lng
var destination = lat.toString() + ", " + lng.toString()
var dist = await calcRouteP(origin,destination);
if (dist <= minDistance) {
return 'red'
}
}
console.log(2)
return 'green'
}
請注意,對於最后一個參數是傳遞了err, result
的回調的函數err, result
類似於calcRoute
函數,通常會有庫為您包裝。 在node.js中,而不是自己包裝calcRoute
您可以執行此操作
const util = require('util');
const calcRouteP = util.promisifiy(calcRoute);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.