Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Buat Aplikasi web
Bahasa: Bahasa Indonesia

Stream

Halaman ini diterjemahkan dari bahasa Inggris. Jika keduanya berbeda, halaman bahasa Inggris yang benar. Baca halaman bahasa Inggris

Empat operasi men-stream hasilnya sebagai server-sent events: membuat kosakata, mengirim pesan ke tutor, membuat rencana pelajaran, dan mengikuti rencana pelajaran. Setiap pustaka mengubah aliran event menjadi jenis iterator milik bahasa itu sendiri, dan memberikan setiap event kepada Anda dalam bentuk nilai bertipe yang sudah didekode.

Bagaimana stream berakhir

  • Saat pekerjaan selesai. Iterasi berhenti dengan sendirinya pada event terakhir stream. Untuk rencana pelajaran, event terakhir itu membawa hasilnya, jadi Anda menerimanya sebelum perulangan berakhir.
  • Saat API melaporkan error. Error yang datang di dalam stream dilempar sebagai error API, tipe yang sama dengan error yang datang sebelum stream dimulai.
  • Saat koneksi gagal. Stream yang berakhir sebelum event terakhirnya, atau yang sama sekali tidak mengirim apa pun selama 120 detik, dilempar sebagai error transport.
  • Saat Anda berhenti. Batalkan panggilan dengan cara yang biasa di bahasa Anda, atau berhenti membaca, dan koneksi segera ditutup.

Komentar keepalive dan jenis event yang belum dikenal pustaka dilewati, sehingga API yang lebih baru tidak pernah merusak pustaka yang lebih lama.

Tidak pernah diputar ulang

Stream yang sudah mengirimkan satu event saja tidak pernah diulang oleh pustaka, karena mengulangnya bisa menghabiskan jatah Anda dua kali. Jika stream rencana pelajaran terputus setelah dimulai, ikuti rencana yang sama dengan streamLessonPlan dan plan_id dari event pertamanya.

Bahasa contoh kode

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";
    }
}

Yang dibungkus halaman ini