Forum: PC-Programmierung javascript funktionsaufruf "ohne" parameter


von c. m. (Gast)


Lesenswert?

ich hab ein verstänsnisproblem bei einer funktion mit parameter, die 
aber ohne parameter aufgerufen wird.

gotStream(stream) wird in .then(gotStream) aufgerufen - woher hat 
gotStream(stream) nun den parameter für die folgenden zuweisungen?

die variable "stream" ist nicht global definiert (zumindest nicht 
explizit), kommt also exakt nur 3 mal in gotStream() vor.

ich steh auf dem schlauch und weiss nicht mal wonach ich googeln soll. 
zu hülfe! :)
1
function gotStream(stream) {
2
    trace('Received local stream');
3
    localVideo.srcObject = stream;
4
    localStream = stream;
5
    callButton.disabled = false;
6
}
7
8
function start() {
9
    trace('Requesting local stream');
10
    startButton.disabled = true;
11
    navigator.mediaDevices.getUserMedia({
12
        audio: true,
13
        video: true
14
    })
15
            .then(gotStream)
16
            .catch(function (e) {
17
                trace('getUserMedia() error: ' + e.name);
18
        alert('getUserMedia() error: ' + e.name);
19
            });
20
}
quelle: https://webrtc.github.io/samples/

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

c. m. schrieb:
> woher hat gotStream(stream) nun den parameter für die folgenden
> zuweisungen?

Der Parameter sollte beim Aufruf angegeben werden. Wird er das nicht, 
ist er innerhalb der Funktion "null", d.h. die Funktion muss so 
programmiert sein, daß sie damit klarkommt.

von Jim M. (turboj)


Lesenswert?

Das .then(gotStream) setzt nur eine Art Funktionszeiger.

Den eigentlichen Aufruf von gotStream findet für Dich so nicht sichtbar 
intern statt, und dort wird der Stream übergeben.

von c. m. (Gast)


Lesenswert?

ein expliziter aufruf .then(gotStream(null)) bringt nicht das gleiche 
ergebnis wie .then(gotStream) (webcambild wird nicht angezeigt).

eine testausgabe in gotsStream(staeam) beim aufruf von .then(gotStream) 
zeigt eina alertbox "stream: [object LocalMediaStream]"
1
function gotStream(stream) {
2
    trace('Received local stream');
3
    alert('stream: '+stream);
4
    localVideo.srcObject = stream;
5
    localStream = stream;
6
    callButton.disabled = false;
7
}

irgendwoher muss das zu übergebende objekt kommen, aber woher?

von Martin (Gast)


Lesenswert?

Du möchtest nach es6 promises suchen. Das ist eine Art der asynchronen 
Programmierung in Javascript die es dir ermöglicht ein Objekt erst dann 
zu konsumieren wenn es bereitsteht, dabei gleichzeitig eine 
Fehlerbehandlung durchzuführen.

von c. m. (Gast)


Lesenswert?

Jim M. schrieb:
> Das .then(gotStream) setzt nur eine Art Funktionszeiger.
>
> Den eigentlichen Aufruf von gotStream findet für Dich so nicht sichtbar
> intern statt, und dort wird der Stream übergeben.

das macht sinn.
ist mir schon weiter oben im beispielscript aufgefallen, wo es heißt:
1
startButton.onclick = start;
und start() ist eine funktion. kann man nicht mit klammern zuweisen, 
weil sie dann direkt ausgeführt wird, aber zuweisung der 
"funktionsadresse" ohne klammern funktioniert.

das ist ja eine lausige sprache :/

danke für die hilfe auf jeden fall :)

von c. m. (Gast)


Lesenswert?

Martin schrieb:
> Du möchtest nach es6 promises suchen. Das ist eine Art der
> asynchronen
> Programmierung in Javascript die es dir ermöglicht ein Objekt erst dann
> zu konsumieren wenn es bereitsteht, dabei gleichzeitig eine
> Fehlerbehandlung durchzuführen.

eigentlich möchte ich, dass unsere webentwickler das machen, und nicht 
ich das aufgehalst bekomme weil in "javascript" das wörtchen "java" 
vorkommt. (kein witz. überhaupt kein witz.)

von DPA (Gast)


Lesenswert?

c. m. schrieb:
> das ist ja eine lausige sprache :/

Nö, also zumindest nicht deshalb. Das sind ganz normale Callbacks, die 
dich irritieren, ein äusserst praktisches Konzept. Werden auch gerne 
zusammen mit callback.bind(x,y) und arrow funktion 
(x,y)=>callback(x,y,z) verwendet.

c. m. schrieb:
> eigentlich möchte ich, dass unsere webentwickler das machen, und nicht
> ich das aufgehalst bekomme weil in "javascript" das wörtchen "java"
> vorkommt. (kein witz. überhaupt kein witz.)

Das ist doch kein Problem von JavaScript. Wenn dir dass nicht passt, 
beschwere dich beim Management oder deinen Webentwicklern. Oder war das 
nicht im Lastenheft?

von Jim M. (turboj)


Lesenswert?

c. m. schrieb:
> und start() ist eine funktion. kann man nicht mit klammern zuweisen,
> weil sie dann direkt ausgeführt wird, aber zuweisung der
> "funktionsadresse" ohne klammern funktioniert.
>
> das ist ja eine lausige sprache :/

Keine Frage, das geht ohne Pointer aber kaum anders. Denn man weist eine 
Funktion selbst (zum späteren Aufruf) und nicht deren Rückgabewert zu.

Die Systax stammt so schon vom Urvater C.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.