RTCPeerConnection.createOffer "promise" 用法

der*_*rek 4 javascript webrtc es6-promise

我最近正在学习 WebRTC,在这里发现了“promise”的用法(https://github.com/mdn/samples-server/blob/master/s/webrtc-simple-datachannel/main.js)。

localConnection.createOffer()
    .then(offer => localConnection.setLocalDescription(offer))
    .then(() => remoteConnection.setRemoteDescription(localConnection.localDescription))
    .then(() => remoteConnection.createAnswer())
    .then(answer => remoteConnection.setLocalDescription(answer))
    .then(() => localConnection.setRemoteDescription(remoteConnection.localDescription))
    .catch(handleCreateDescriptionError);
Run Code Online (Sandbox Code Playgroud)

localConnection 和 removeConnection 是 RTCPeerConnection 对象。从这里https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection

创建优惠:

void createOffer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, 可选的 MediaConstraints 约束);

createOffer 有 3 个参数。但是为什么上面的代码没有参数呢?参数在哪里?

jib*_*jib 5

因为 API 已经通过 promise 进行了现代化,并且文档已经过时。

前:

pc.createOffer(onSuccess, onFailure, options);
Run Code Online (Sandbox Code Playgroud)

之后

pc.createOffer(options).then(onSuccess, onFailure)
Run Code Online (Sandbox Code Playgroud)

哪里options是可选的。由于adapter.js polyfill,这应该适用于所有支持WebRTC的浏览器(并且也适用于Firefox本机)。

ES6=>箭头函数在 Firefox 和 Chrome 45 中有效,你可以试试这个

pc.createOffer(onSuccess, onFailure, options);
Run Code Online (Sandbox Code Playgroud)
pc.createOffer(options).then(onSuccess, onFailure)
Run Code Online (Sandbox Code Playgroud)

注意: Chrome 45 用户,请使用fiddle,因为相同的代码在 stackoverflow 代码段中不起作用!