fix(uat-02-01): await async jamClient methods to fix NaN values
Fixes UAT-002: Player showing NaN:NaN and slider positioning incorrectly Root Cause: jam-ui's jamClientProxy uses Proxy pattern where ALL methods return Promises (via sendWhenReady → sendMessage → deferred.promise). Code was calling SessionGetTracksPlayDurationMs(), SessionCurrrentPlayPosMs(), and isSessionTrackPlaying() synchronously without await. Result: Promise objects were passed to formatTime() and slider calculations, causing NaN values and incorrect slider behavior. Solution: - Wrapped initialization duration fetch in async function with await - Changed polling setInterval callback to async function with await for all calls - Now correctly awaits all jamClient Promise-based methods This matches jam-ui's async jamClient architecture (different from legacy web's synchronous bridge API). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
0561c8988b
commit
2a435806e7
|
|
@ -43,20 +43,24 @@ const JKSessionBackingTrackPlayer = ({
|
|||
setCurrentTime('0:00');
|
||||
setCurrentPositionMs(0);
|
||||
|
||||
// Fetch and set duration immediately when track loads
|
||||
try {
|
||||
const durationInMs = jamClient.SessionGetTracksPlayDurationMs();
|
||||
console.log('JKSessionBackingTrackPlayer: Duration from jamClient:', durationInMs, 'Type:', typeof durationInMs);
|
||||
// Fetch and set duration immediately when track loads (async)
|
||||
const fetchDuration = async () => {
|
||||
try {
|
||||
const durationInMs = await jamClient.SessionGetTracksPlayDurationMs();
|
||||
console.log('JKSessionBackingTrackPlayer: Duration from jamClient:', durationInMs, 'Type:', typeof durationInMs);
|
||||
|
||||
// Ensure we have a valid number
|
||||
const validDuration = (durationInMs != null && !isNaN(durationInMs) && durationInMs >= 0) ? durationInMs : 0;
|
||||
setDurationMs(validDuration);
|
||||
setDuration(formatTime(validDuration));
|
||||
} catch (error) {
|
||||
console.error('Error fetching track duration:', error);
|
||||
setDuration('0:00');
|
||||
setDurationMs(0);
|
||||
}
|
||||
// Ensure we have a valid number
|
||||
const validDuration = (durationInMs != null && !isNaN(durationInMs) && durationInMs >= 0) ? durationInMs : 0;
|
||||
setDurationMs(validDuration);
|
||||
setDuration(formatTime(validDuration));
|
||||
} catch (error) {
|
||||
console.error('Error fetching track duration:', error);
|
||||
setDuration('0:00');
|
||||
setDurationMs(0);
|
||||
}
|
||||
};
|
||||
|
||||
fetchDuration();
|
||||
}
|
||||
}, [isOpen, backingTrack, jamClient]);
|
||||
|
||||
|
|
@ -65,14 +69,15 @@ const JKSessionBackingTrackPlayer = ({
|
|||
let intervalId = null;
|
||||
|
||||
if (isPlaying && jamClient) {
|
||||
// Start polling when playing
|
||||
intervalId = setInterval(() => {
|
||||
// Start polling when playing (async)
|
||||
intervalId = setInterval(async () => {
|
||||
try {
|
||||
if (!jamClient) return;
|
||||
|
||||
const positionMs = jamClient.SessionCurrrentPlayPosMs();
|
||||
const durationInMs = jamClient.SessionGetTracksPlayDurationMs();
|
||||
const trackIsPlaying = jamClient.isSessionTrackPlaying();
|
||||
// Await all async jamClient calls
|
||||
const positionMs = await jamClient.SessionCurrrentPlayPosMs();
|
||||
const durationInMs = await jamClient.SessionGetTracksPlayDurationMs();
|
||||
const trackIsPlaying = await jamClient.isSessionTrackPlaying();
|
||||
|
||||
console.log('JKSessionBackingTrackPlayer polling:', { positionMs, durationInMs, trackIsPlaying });
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue