Thomas hat es ziemlich gut in seinem Kommentar zusammengefasst:
dann() erwartet eine Funktion, aber addMessage() gibt ein Versprechen. A Versprechen ist keine Funktion. Und alle Ihre Versprechen am gleichzeitig erstellt werden, das ist, warum sie zur gleichen Zeit feuern
Sie bauen alle neuen Versprechungen zugleich so werden sie sofort ausführen und die Zeitgeber wird dann auch gleichzeitig Ende gleichzeitig. Um dies zu verringern, können Sie addMessage
in eine Funktion innerhalb der .then
Anrufe umbrechen.
addMessage('Hello who are you ?')
.then(function() { addMessage('Hello I am John') })
.then(function() { addMessage('Nice too meet you') })
.then(function() { addMessage('Me too') })
.then(function() { addMessage('Good Bye') })
.then(function() { addMessage('Bye') })
Alternativ können Sie auch Function.prototype.bind() verwenden, um zu vermeiden eine anonyme Funktion jedes Mal zu schreiben.
addMessage('Hello who are you ?')
.then(addMessage.bind(null, 'Hello I am John'))
.then(addMessage.bind(null, 'Nice too meet you'))
.then(addMessage.bind(null, 'Me too'))
.then(addMessage.bind(null, 'Good Bye'))
.then(addMessage.bind(null, 'Bye'))
Und natürlich, wenn Ihre Umgebung eine aktuelle Version von JavaScript ausgeführt wird Sie auch arrow functions verwenden:
addMessage('Hello who are you ?')
.then(() => addMessage('Hello I am John'))
.then(() => addMessage('Nice too meet you'))
.then(() => addMessage('Me too'))
.then(() => addMessage('Good Bye'))
.then(() => addMessage('Bye'))
In naher Zukunft werden Sie auch die await keyword nutzen können, die die Notwendigkeit beseitigt vollständig für alle .then
Anrufe:
await addMessage('Hello who are you ?')
await addMessage('Hello I am John')
await addMessage('Nice too meet you')
await addMessage('Me too')
await addMessage('Good Bye')
await addMessage('Bye')
'dann()' erwartet eine Funktion, aber 'addMessage()' gibt ein Versprechen. Ein Versprechen ist keine Funktion. Und alle deine Versprechen werden zur selben Zeit erstellt, deshalb feuern sie gleichzeitig – Thomas
"Ich möchte eine falsche Diskussion in JS mit Versprechen erstellen." Warum mit Versprechen? IMO die Versprechungen verkomplizieren hier nur die Dinge und bringen keinen Nutzen. – Thomas
Mögliches Duplikat von [ES6 verspricht: wie man Funktionen mit Argumenten kettet] (https://stackoverflow.com/questions/36627845/es6-versprechen-wie-zu-kettenfunktionen-mit-argumenten) – jib