簡體   English   中英

在react-native / expo中的異步函數中訪問const

[英]Access const inside async function in react-native / expo

我正在嘗試使用expo-av lib

我使用以下異步函數從URL播放聲音文件:

PlaySound = async (soundURL) => {
    try { 
        const playbackObject = await Audio.Sound.createAsync(
            { uri: soundURL },
            { shouldPlay: this.state.shouldPlay }
        );
     } catch (error) {
           console.log('ERROR:'+error);
           // Error retrieving data
     }

    return playbackObject;
};


stopSound = async (soundURL) => {
try {

  this.setState({shouldPlay:false});
   const playbackObject = await PlaySound(soundURL);

 } catch (error) {
  console.log('ERROR:'+error);
  // Error retrieving data
}
playbackObject.stopAsync(); // this is causing the error
};

我收到此錯誤:

錯誤:ReferenceError:找不到變量:playingObject

[未處理的承諾拒絕:ReferenceError:找不到變量:playingObject]

PlaySound函數可以根據需要工作。 現在,我希望能夠使用stopSound函數暫停/停止。 文檔說,使用soundObject.stopAsync()這在我的情況下,將playbackObject 但是我不知道如何在函數外部訪問此const?

誰能指出我正確的方向?

您不能引用在try catch之外的try / catch內部定義的const。 您可以通過以下任一方法解決此問題:

let playbackObject;

try { 
  playbackObject = await Audio.Sound.createAsync(
    { uri: soundURL },
    { shouldPlay: this.state.shouldPlay }
  );
} catch (error) {
  console.log('ERROR:'+error);
  // Error retrieving data
}

return playbackObject;

要么

try { 
  return Audio.Sound.createAsync(
    { uri: soundURL },
    { shouldPlay: this.state.shouldPlay }
  );
} catch (error) {
  console.log('ERROR:'+error);
  // Error retrieving data
}

為了修復stop函數,您應該維護對start函數返回的playingObject的引用,並在stop函數中使用該引用,因為您當前擁有的方式會創建一個新的音頻流,然后停止該音頻流(保持原樣不變)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM