Я написал следующий код:
'use strict';
...
class Foo {
constructor( ws, ontrack ) {
this.pc = new RTCPeerConnection(configuration);
...
}
handleOffer( offer ) {
var desc = offer;
this.pc.setRemoteDescription( desc )
.then( () =>
navigator.mediaDevices.getUserMedia(constraints)
.then( (stream) => {
console.log("getUserMedia done");
stream.getTracks().forEach((track) => this.pc.addTrack(track, stream));
this.pc.createAnswer( desc )
.then( (answer) => {
console.log("createAnswer done");
desc = answer;
this.pc.setLocalDescription( desc )
.then( () => this.ws.send( { type:"webrtc.answer", answer: desc } ));
} )
} )
);
}
...
}
Он делает то, что ожидается. Однако вложение нескольких «тогда» приводит к коду, который, на мой взгляд, трудно читать.
Знает ли кто-нибудь альтернативу?
Я пытался использовать (устарело?) Async / await. Однако редактор eclipse жалуется на «пропущенную точку с запятой» сразу после любого ожидания или асинхронности в коде (почему?)
(примечание: есть несколько связанных вопросов по обмену стека, но все, что я нашел, говорят о массивах).