Forum: PC-Programmierung javascript funktionsaufruf "ohne" parameter


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von c. m. (Gast)


Bewertung
0 lesenswert
nicht 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! :)
function gotStream(stream) {
    trace('Received local stream');
    localVideo.srcObject = stream;
    localStream = stream;
    callButton.disabled = false;
}

function start() {
    trace('Requesting local stream');
    startButton.disabled = true;
    navigator.mediaDevices.getUserMedia({
        audio: true,
        video: true
    })
            .then(gotStream)
            .catch(function (e) {
                trace('getUserMedia() error: ' + e.name);
        alert('getUserMedia() error: ' + e.name);
            });
}
quelle: https://webrtc.github.io/samples/

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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]"
function gotStream(stream) {
    trace('Received local stream');
    alert('stream: '+stream);
    localVideo.srcObject = stream;
    localStream = stream;
    callButton.disabled = false;
}

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

von Martin (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht 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:
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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.