Можно ли использовать асинхронную функцию без await?

#javascript #asynchronous #async-await #webrtc

#javascript #асинхронный #async-await #webrtc

Вопрос:

Я просматривал документацию WebRTC и нашел следующий фрагмент кода.

  const openMediaDevices = async (constraints) => {
    return await navigator.mediaDevices.getUserMedia(constraints);
}

try {
    const stream = openMediaDevices({'video':true,'audio':true});
    console.log('Got MediaStream:', stream);
} catch(error) {
    console.error('Error accessing media devices.', error);
}
  

Здесь openMediaDevices() возвращает обещание, пока оно использовалось внутри блока try{} без какого-либо ожидания. Будет ли программа ждать завершения openMediaDevices()? Если да, то как?

Комментарии:

1. возвращаемые Promise и async разные. На самом деле, внутренний Javascript, вероятно, используется Promise для обеспечения функциональности с async await помощью ключевых слов and

2. @canbax async и await в основном являются синтаксическим сахаром по сравнению с обещаниями разрешить альтернативный синтаксис. Они не отличаются.

Ответ №1:

Будет ли программа ждать завершения openMediaDevices()?

Нет.

Комментарии:

1. Значит, у них неправильная программа? Пожалуйста, проверьте webrtc.org/getting-started/media-devices#using-asyncawait .

2. Более подробно в webrtc.org коде отсутствует await оператор между const stream = и сразу после вызова openMediaDevices (по крайней мере, в октябре 2020 года).

3. Предоставление вспомогательной функции navigator.mediaDevices.getUserMedia более короткого имени async также совершенно бессмысленно.

4. учебное пособие по webrtc.org это неправильно в этом и других местах…