gpt4 book ai didi

javascript - 在react-native/expo中访问async函数内部的const

转载 作者:行者123 更新时间:2023-12-02 23:09:12 29 4
gpt4 key购买 nike

我正在尝试使用 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
};

我收到此错误:

ERROR:ReferenceError: Can't find variable: playbackObject

[Unhandled promise rejection: ReferenceError: Can't find variable: playbackObject]

PlaySound 函数按我想要的方式工作。现在我希望能够使用 stopSound 函数暂停/停止。 The documentation说使用 soundObject.stopAsync() ,在我的例子中是 playbackObject。但我不知道如何在函数之外访问这个常量?

有人能指出我正确的方向吗?

最佳答案

您不能在 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
}

为了修复停止函数,您应该维护对开始函数返回的playbackObject的引用,并在停止函数中使用它,因为您当前的方式会创建一个新的音频流,您将然后停止(保留原件)。

关于javascript - 在react-native/expo中访问async函数内部的const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57451487/

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