Не знаю, почему обещание все еще возвращается, когда меня ждут

#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);
},