【发布时间】:2021-07-25 20:55:22
【问题描述】:
我需要多次调用异步函数(这里是强制电机速度),直到达到最大速度。
但我不知道如何在没有预定义呼叫次数的情况下编写“多次呼叫”。 这是我的代码的基础。
/* drive motor
from initialSpeedPercent
to finalSpeedPercent
step by step with delay
*/
var initialSpeedPercent = 0;
var finalSpeedPercent = 80;
var duration = 2000; // in millisecond
var accelerationStep = 5;
var stepSpeed = (finalSpeedPercent - initialSpeedPercent) / (accelerationStep - 1);
var stepDuration = duration / (accelerationStep - 1);
function setMotorSpeed( percentOfSpeed, funcWhenCompleted) {
// send consign to motor then return
console.log( `motorspeed set to ${percentOfSpeed}`);
let err = undefined; // depending of motor behavior
if (err) {
funcWhenCompleted( { cmd: 'setMotorSpeed', err: err }, undefined );
}
else {
funcWhenCompleted( undefined, { cmd: 'setMotorSpeed', newSpeed: percentOfSpeed } );
}
}
const promiseSpeed = new Promise( function ( resolve, reject ) {
initialSpeedPercent += stepSpeed;
setMotorSpeed( initialSpeedPercent, function (err, result) {
if (err) {
reject( err);
} else {
// resolve after step duration
setTimeout( () => {
resolve( result );
}, stepDuration );
}
} );
} );
promiseSpeed
.then( ( result ) => {
console.log( 'promiseSpeed success:', result );
... how to call in cascade.... until result.newSpeed >= finalSpeedPercent ?
promiseSpeed
.then( ( result ) => {
console.log( 'promiseSpeed success:', result );
} );
} )
.catch( ( error ) => {
console.log( 'promiseSpeed error:', error );
} )
.finally( () => {
console.log('promiseSpeed() is done!');
} );
怎么做?
【问题讨论】: