Was ist der Unterschied zwischen End- und Endereignissen in Node-Streams?


75

Node.js Streams lösen sowohl Ereignisse endals auch finishEreignisse aus. Was ist der Unterschied zwischen beiden?

Antworten:


131

endund finishsind das gleiche Ereignis, ABER auf verschiedenen Arten von Streams.

  • stream.Readablefeuert NUR endund NIEfinish
  • stream.Writablefeuert NUR finishund NIEend

Quelle: https://nodejs.org/dist/latest-v5.x/docs/api/stream.html

Warum die unterschiedliche Benennung des gleichen Ereignisses?

Der einzige Grund, an den ich denken könnte, sind Duplex-Streams ( stream.Duplex), die beide implementieren, stream.Readableund stream.WritableSchnittstellen ( https://nodejs.org/dist/latest-v5.x/docs/api/stream.html#stream_class_stream_duplex ) sind lesbar und gleichzeitig beschreibbarer Stream. Um zwischen dem Ende des Lesens und dem Ende des Schreibens im Stream zu unterscheiden, muss ein anderes Ereignis ausgelöst werden. SO, für Duplex-Streams endist das Ende des Lesens und finishdas Ende des Schreibens.


1
Und auch ein TransformStream hat beides endund finishEreignisse. In der Tat erstreckt es sich Duplex.
Rocco Musolino

Ist dies nach Node.js Version 8 noch für die Steams-API gültig?
Alexander Mills

1
@AlexanderMills Was haben die Dokumente gesagt ( nodejs.org/dist/latest-v12.x/docs/api/stream.html )? Sie können auch einen einfachen Testfall mit beispielsweise fs.ReadStream und fs.WriteStream - nodejs.org/dist/latest-v12.x/docs/api/… ausprobieren . Fühlen Sie sich frei, Ihre Erkenntnisse beizutragen.
Tiblu

endvon Daten vs. finished Arbeiten macht Sinn. Ein beschreibbarer Benutzer hat möglicherweise alle Daten empfangen, die er erhalten wird, z. B. hat er Daten endvon Upstream erhalten, funktioniert aber immer noch. (Ich bin nicht sicher, aber zu vermuten, dass für eine Transformation finishedimmer danach kommt end?)
Craig Hicks
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.