gpt4 book ai didi

Javascript:如何制作同步循环?

转载 作者:行者123 更新时间:2023-11-30 14:17:07 25 4
gpt4 key购买 nike

我对 JavaScript 的同步/异步处理感到困惑。

下面是我想做的。当调用 self_driving() 时,然后调用 get_direction_by_sensor() 并使用方向,moter 通过 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() 调用Python编写的webiopi宏

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');
}
});
}

最佳答案

settimeout 必须用一个 promise 包裹起来,这样它才能被等待。看

function self_driving_loop(maxCount, i) {
return new Promise(resolve => {
if (i <= maxCount) {
move_to_direction();
setTimeout(function(){
self_driving_loop(maxCount, ++i)
resolve()
}, 1000);
}
})
};

异步函数中这样调用

await self_driving_loop(maxCount, i)

关于Javascript:如何制作同步循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53404819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com