Меня смущает синхронная / асинхронная обработка JavaScript.
Что я хочу сделать, это ниже.Когда вызывается self_driving()
, вызывается get_direction_by_sensor()
и, используя направление, двигатель начинает работать с move_to_direction(direction)
.Этот процесс повторяется 5 раз.
function get_direction_by_sensor(){
// code for getting direction from sensor
return direction
};
function move_to_direction(direction){
direction = get_direction_by_sensor()
// code for driving motor to the direction
};
function self_driving_loop(maxCount, i) {
if (i <= maxCount) {
move_to_direction();
setTimeout(function(){
self_driving_loop(maxCount, ++i)
}, 1000);
}
};
function self_driving() {
self_driving_loop(5, 1)
};
Итак, я хочу, чтобы этот код работал следующим образом.
1. get_direction_by_sensor()
1. move_to_direction()
2. get_direction_by_sensor()
2. move_to_direction()
3. get_direction_by_sensor()
3. move_to_direction()
4. get_direction_by_sensor()
4. move_to_direction()
5. get_direction_by_sensor()
5. move_to_direction()
Но на самом деле он работает следующим образом.
1. get_direction_by_sensor()
2. get_direction_by_sensor()
3. get_direction_by_sensor()
4. get_direction_by_sensor()
5. get_direction_by_sensor() // this direction is used for moving
5. move_to_direction()
Как я могу исправить этот код?Спасибо.
======== ПОДРОБНАЯ ИНФОРМАЦИЯ ========
move_to_direction()
calles Макрос webiopi, написанный Python.
function move_to_direction() {
w().callMacro('get_direction_to_move', [TRIG_F ,ECHO_F ,TRIG_R ,ECHO_R ,TRIG_L ,ECHO_L ,TRIG_B ,ECHO_B], function(macro, args, resp) {
console.log(resp) // DEBUG
if(resp == "forward") {
change_direction('FOWARD');
} else if(resp == "right") {
change_direction('RIGHT');
} else if(resp == "left") {
change_direction('LEFT');
} else if(resp == "backward") {
change_direction('BACKWARD');
}
});
}