- From: cowwoc <cowwoc@bbs.darktech.org>
- Date: Mon, 03 Jun 2013 18:09:06 -0400
- To: public-webrtc@w3.org
On 03/06/2013 5:37 PM, Jan-Ivar Bruaroey wrote: > > Let me admit that I read about DOM Futures for the first time today at > https://github.com/slightlyoff/DOMFuture so it's still a bit of a > head-rush, but a welcome one, as I'd been scratching my head about how > our api could be made easier. > > I like it! - TL;DR: Success/failure callbacks encapsulated in > primary-return object let you write robust asynchronous code linearly. I've recently migrated my own application from callbacks to DOM Futures and I must say it's a pleasure to work with. There are some cosmetic issues which I hope will be improved (see [1] and [2]) but one major issue I want to draw light to is: https://github.com/slightlyoff/Futures/issues/57 [1] done() method shows up in specification but is being removed in the implementation: https://github.com/slightlyoff/Futures/issues/33 [2] API method names should be more intuitive: https://github.com/slightlyoff/Futures/issues/55 > Thanks! An example would help me, so I tried to write one from this. > Please correct me if I get this wrong of if it can be made simpler. > Let me use this dense "simple test" I have lying around. First the old > way: > > function simpletest_oldapi() { > var pc1 = new RTCPeerConnection(); > var pc2 = new RTCPeerConnection(); > > navigator.GetUserMedia({video:true}, function(video1) { > pc1.addStream(video1); > pc1.createOffer(function(offer) { > pc1.setLocalDescription(offer, function() { > pc2.setRemoteDescription(offer, function() { > pc2.createAnswer(function(answer) { > pc2.setLocalDescription(answer, function() { > pc1.setRemoteDescription(answer, function() { > finish(); > }, fail); > }, fail); > }, fail); > }, fail); > }, fail); > }, fail); > }, fail); > } > > function simpletest_newapi() { > var pc1 = new RTCPeerConnection(); > var pc2 = new RTCPeerConnection(); > > navigator.GetUserMedia({video:true}) > .then(function(video1) { > pc1.addStream(video1); > return pc1.createOffer(); > }) > .then(function(offer) { > return pc1.setLocalDescription(offer) > .then(pc2.setRemoteDescription(offer);); > }) > .then(pc2.createAnswer()) > .then(function(answer) { > return pc2.setLocalDescription(answer) > .then(pc1.setRemoteDescription(answer)); > }) > .then(finish, fail); > } > > Is that about right? Almost. This code doesn't make sense to me: "then(pc2.setRemoteDescription(offer););" then() expects you to pass in a callback. "pc2.setRemoteDescription(offer)" returns a Future, not a callback. I think you'd have to surround the call with "function(){}" to fix the code. Gili
Received on Monday, 3 June 2013 22:10:38 UTC