Я уже знаю, что этот вопрос задавался много раз, но я не могу понять, как организовать свой код. Я исхожу из языка C / C ++ и все еще думаю, и то, что я пишу в JS, выглядит «бессмысленным».
Я использую рекурсивную функцию для генерации путешествовать по карте. Дело в том, что мне нужно сделать 2 асинхронных вызова 2 разных API, второй зависит от результата первого.
На самом деле, я всегда использую функции обратного вызова, например:
function asyncFunction(param, callbackF) {
// ... //
$.get(url, function(data, status) {
callbackF(data, status);
})
}
function asyncFunction2(param, callbackF) {
// ... //
$.get(url2, function(data, status) {
callbackF(data, status);
})
}
function recursiveFunction(param1, param2, num, tab, distance) {
//.. stuff with parameters //
asynFunction(param1, function(result, status) {
// .. stuff with parameters .. //
//.. Algo stops when distance is 0 ..//
if(!distance) {
asyncFunction2(param, function(data, status) {
// Final stuff //
return; // End
});
}
else recursiveFunction(param1, param2, num, tab, distance); // parameters has been updated
});
}
recursiveFunction(param1, param2, num, tab, distance);
Это работает, но уродливо с большим количеством затейливости, и я не могу в любой момент узнать, не сработала ли эта функция (например, произошел сбой вызова API и т. Д. c).
Вопрос Как я могу ввести Обещания в этом контексте или асинхронные / ожидающие условия в JS? Как я могу превратить этот код в более понятный способ?
Спасибо.