Поскольку EasyPath работает асинхронно, вы не можете быть уверены, когда будет выполнена функция, которую вы передаете findPath()
.По этой причине любая логика, которой необходимо конечное значение Dist
, должна быть помещена в эту функцию.Поскольку это может очень быстро стать уродливым, вы можете передать успешный обратный вызов на Distance()
, который вызывается после вычисления Dist
, вот так.
function myFunc() {
var grid = [
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]
];
Distance(0, 0, 4, 0, grid, handleDist);
};
var handleDist = function(dist) {
// Do something with dist.
};
function Distance(A, B, C, D, G, callback) {
easystar.setGrid(G);
easystar.findPath(A, B, C, D, function(path) {
Dist = 1;
for (F = 0; F < Dist; F++) {
if (typeof path[F] !== null) { Dist++; }
else { }
}
callback(Dist);
});
easystar.calculate();
}
myFunc()
- это всего лишь пример того, какDistance()
можно назвать.Как видите, handleDist()
- это отдельная функция, которую вы напишите для обработки окончательного значения Dist
.Вы передаете это в Distance()
и вызываете его в функции обратного вызова findPath()
.
Обещания помогут в дальнейшей очистке этого кода, но, поскольку я незнаком с EasyPath, яя не уверен, что он их поддерживает.