[英]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.