Lingara Lingara Tài liệu Cẩm nang API Thư viện Ứng dụng Tạo Ứng dụng web
Ngôn ngữ: Tiếng Việt

Luồng

Trang này được dịch từ tiếng Anh. Nếu hai bản khác nhau, trang tiếng Anh là bản đúng. Đọc trang tiếng Anh

Bốn thao tác phát trực tuyến kết quả dưới dạng sự kiện do máy chủ gửi: tạo từ vựng, gửi tin nhắn cho gia sư, tạo kế hoạch bài học và theo dõi một kế hoạch bài học. Mọi thư viện đều biến luồng sự kiện thành trình lặp riêng của từng ngôn ngữ, và đưa cho bạn từng sự kiện đã được giải mã thành một giá trị có kiểu.

Cách một luồng kết thúc

  • Khi công việc hoàn tất. Vòng lặp tự dừng ở sự kiện cuối cùng của luồng. Với kế hoạch bài học, sự kiện cuối cùng đó mang theo kết quả, nên bạn nhận được kết quả trước khi vòng lặp kết thúc.
  • Khi API báo lỗi. Lỗi đến bên trong luồng được ném ra dưới dạng lỗi API, cùng kiểu với lỗi đến trước khi luồng bắt đầu.
  • Khi kết nối thất bại. Luồng kết thúc trước sự kiện cuối cùng, hoặc không gửi gì trong 120 giây, sẽ được ném ra dưới dạng lỗi truyền tải.
  • Khi bạn dừng lại. Hãy hủy lệnh gọi theo cách thông thường của ngôn ngữ bạn dùng, hoặc ngừng đọc, và kết nối sẽ đóng ngay.

Các chú thích giữ kết nối và các loại sự kiện mà thư viện chưa biết sẽ được bỏ qua, nên một API mới hơn không bao giờ làm hỏng một thư viện cũ hơn.

Không bao giờ phát lại

Một luồng đã gửi đi dù chỉ một sự kiện sẽ không bao giờ được thư viện thử lại, vì lặp lại nó có thể tiêu hao hạn mức của bạn hai lần. Nếu luồng của một kế hoạch bài học bị đứt sau khi đã bắt đầu, hãy tiếp tục theo dõi cùng kế hoạch đó bằng streamLessonPlan và plan_id lấy từ sự kiện đầu tiên của nó.

Ngôn ngữ của mã mẫu

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

Những gì trang này bao bọc