Lingara Lingara Τεκμηρίωση Οδηγοί API Βιβλιοθήκες Εφαρμογές Δημιουργία Διαδικτυακή εφαρμογή
Γλώσσα: Ελληνικά

Ροές

Αυτή η σελίδα έχει μεταφραστεί από τα αγγλικά. Αν οι δύο διαφέρουν, η αγγλική σελίδα είναι η σωστή. Διαβάστε την αγγλική σελίδα

Τέσσερις λειτουργίες μεταδίδουν τα αποτελέσματά τους ως server-sent events: η δημιουργία λεξιλογίου, η αποστολή μηνύματος στον δάσκαλο, η δημιουργία πλάνου μαθήματος και η παρακολούθησή του. Κάθε βιβλιοθήκη μετατρέπει τη ροή συμβάντων στο είδος iterator που είναι φυσικό για τη γλώσσα και σας δίνει κάθε συμβάν ήδη αποκωδικοποιημένο σε τιμή με τύπο.

Πώς τελειώνει μια ροή

  • Όταν ολοκληρωθεί η εργασία. Η επανάληψη σταματά μόνη της στο τελικό συμβάν της ροής. Σε ένα πλάνο μαθήματος, αυτό το τελικό συμβάν περιέχει το αποτέλεσμα, οπότε το λαμβάνετε πριν τελειώσει ο βρόχος.
  • Όταν το API αναφέρει σφάλμα. Ένα σφάλμα που φτάνει μέσα στη ροή εγείρεται ως σφάλμα API, του ίδιου τύπου με ένα που φτάνει πριν από αυτήν.
  • Όταν αποτύχει η σύνδεση. Μια ροή που τελειώνει πριν από το τελικό της συμβάν, ή που δεν στέλνει απολύτως τίποτα για 120 δευτερόλεπτα, εγείρεται ως σφάλμα μεταφοράς.
  • Όταν σταματήσετε εσείς. Ακυρώστε την κλήση με τον συνηθισμένο τρόπο της γλώσσας σας, ή σταματήστε να διαβάζετε, και η σύνδεση κλείνει άμεσα.

Τα σχόλια keepalive και οι τύποι συμβάντων που μια βιβλιοθήκη δεν γνωρίζει ακόμη παραλείπονται, ώστε ένα νεότερο API να μη χαλάει ποτέ μια παλαιότερη βιβλιοθήκη.

Ποτέ δεν επαναλαμβάνεται

Μια ροή που έχει παραδώσει έστω και ένα συμβάν δεν επαναλαμβάνεται ποτέ από τη βιβλιοθήκη, επειδή η επανάληψη θα μπορούσε να καταναλώσει το όριό σας δύο φορές. Αν η ροή ενός πλάνου μαθήματος διακοπεί αφού έχει ξεκινήσει, παρακολουθήστε το ίδιο πλάνο με streamLessonPlan και το plan_id από το πρώτο της συμβάν.

Γλώσσα παραδείγματος κώδικα

TypeScript

const stream = client.generateVocabulary({ level: 2, source_lang: "en", target_lang: "zh", count: 8 });
for await (const ev of stream) {
  if (ev.event === "item") console.log(ev.data.word, ev.data.translation);
}

Rust

use lingara::models::{GenerateVocabularyEvent, VocabRequest};
use std::num::NonZeroU8;

let request = VocabRequest { level: 2, source_lang: "en".into(), target_lang: "zh".into(), count: NonZeroU8::new(8) };
let mut stream = client.generate_vocabulary(&request).await?;
while let Some(event) = stream.next().await {
    if let GenerateVocabularyEvent::Item(item) = event? {
        println!("{} {}", item.word, item.translation);
    }
}

Go

count := uint8(8)
s, err := client.GenerateVocabulary(ctx, lingara.VocabRequest{Level: 2, SourceLang: "en", TargetLang: "zh", Count: &count})
if err != nil {
	return err
}
defer s.Close()
for ev, err := range s.Events() {
	if err != nil {
		return err
	}
	if item, ok := ev.(lingara.GenerateVocabularyEventItem); ok {
		fmt.Println(item.Data.Word, item.Data.Translation)
	}
}

Java

import com.getlingara.client.model.GenerateVocabularyEvent;
import com.getlingara.client.model.VocabRequest;

VocabRequest request = new VocabRequest().level(2).sourceLang("en").targetLang("zh").count(8);
try (EventStream<GenerateVocabularyEvent> stream = client.generateVocabulary(request)) {
  for (GenerateVocabularyEvent event : stream) {
    if (event instanceof GenerateVocabularyEvent.Item item) {
      System.out.println(item.data().getWord() + " " + item.data().getTranslation());
    }
  }
}

Kotlin

import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.GenerateVocabularyEvent
import com.getlingara.kotlin.model.VocabRequest

val request = VocabRequest(level = 2, sourceLang = "en", targetLang = "zh", count = 8)
// The request is sent here; collect the stream once, inside use {}.
client.generateVocabulary(request).use { stream ->
    stream.collect { event ->
        when (event) {
            is GenerateVocabularyEvent.Item -> println("${event.data.word} ${event.data.translation}")
            is GenerateVocabularyEvent.Started -> Unit
        }
    }
}

Ruby

client.generate_vocabulary(level: 2, source_lang: "en", target_lang: "zh", count: 8) do |event|
  case event
  in Lingara::GenerateVocabularyEventItem => item then puts "#{item.data.word}: #{item.data.translation}"
  else nil
  end
end

PHP

use Lingara\Model\VocabRequest;
use Lingara\Stream\GenerateVocabularyEvent;

$request = new VocabRequest(['level' => 2, 'source_lang' => 'en', 'target_lang' => 'zh', 'count' => 8]);
foreach ($client->generateVocabulary($request) as $event) {
    if ($event instanceof GenerateVocabularyEvent\Item) {
        echo $event->data->getWord(), ': ', $event->data->getTranslation(), "\n";
    }
}

Τι περιβάλλει αυτή η σελίδα