0

历史:我想为 navigator.getUserMedia 创建一个别名/命名空间。在那个过程中,我做了以下事情:

let constraints = {}; // Required for setting device constraints

let _getUserMedia = navigator.getUserMedia.bind(navigator);
// It is necessary to bind to the navigator if one makes an alias out of it.

_getUserMedia(constraints).then(res => console.log(res)).catch(err => console.log(err));

我收到以下错误: 未捕获的类型错误:无法在“导航器”上执行“getUserMedia”:需要 3 个参数,但只有 1 个存在。

正如我们从文档中知道的那样,getUserMedia 接受成功和失败的回调,如果有人没有传递它们,则会返回一个承诺响应。为什么这不返回任何承诺?

非常感谢对这种奇怪的行为解释的任何帮助。

4

2 回答 2

0

我已经做了很多。只需使用

let _getUserMedia = navigator.MediaDevices.getUserMedia

忘记.bind()操作。这是不必要的。

于 2021-04-25T14:04:39.343 回答
0

正如我们从文档中知道的那样,getUserMedia 接受成功和失败的回调,如果有人没有传递它们,则会返回一个承诺响应。

这是不正确的。没有一个神奇的单一版本可以两者兼得。

相反,有两个不同的版本:

  1. navigator.getUserMedia(constraints, successCallback, errorCallback)(已弃用!)
  2. navigator.mediaDevices.getUserMedia(constraints)只有这个返回一个承诺。

此时每个人都应该使用后者,因为前者在 Safari 和 Firefox 中没有实现。

所以你绑定了错误的功能。尝试:

const gUM = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
于 2021-05-29T20:48:48.173 回答