#reactjs
Вопрос:
Я не уверен, почему я все еще получаю сообщение об ошибке, в котором говорится, что обещание возвращается, а не поток. Правильно ли у меня асинхронность и ожидание?
const audioStreamer = useUserMedia({
constraints,
streamListener: async (stream) => {
console.log('Streamlistener in streamcontroller line 64 abut to connect');
console.log(`stream line 238 is ${stream}`);
stream = await getMedia(constraints).then(stream);
console.log(`stream line 240 is ${stream}`);
let source = audioContext.createMediaStreamSource(stream); <--- stream is Promise here
source.connect(analyser);
},
dataCb: (data) => socket.emit('stream', data),
});
async function getMedia(constraints) {
let stream = null;
try {
stream = await navigator.mediaDevices.getUserMedia(constraints);
/* use the stream */
} catch (err) {
/* handle the error */
}
}
Комментарии:
1. Вам, вероятно, следует вернуться
stream
, дождавшись его.async
функции неявно возвращают обещание.2. Я сделал поток = ожидание getMedia(ограничения).затем(поток);
Ответ №1:
Вам, вероятно, следует вернуться stream
, дождавшись его. async
функции неявно возвращают обещание.
async function getMedia(constraints) {
let stream = null;
try {
stream = await navigator.mediaDevices.getUserMedia(constraints);
/* use the stream */
} catch (err) {
/* handle the error */
}
return stream; // <-- return value from function
}
И ждите его в вызывающей функции.
streamListener: async (stream) => {
console.log('Streamlistener in streamcontroller line 64 abut to connect');
console.log(`stream line 238 is ${stream}`);
stream = await getMedia(constraints); // <-- wait
console.log(`stream line 240 is ${stream}`);
let source = audioContext.createMediaStreamSource(stream);
source.connect(analyser);
},