Node.js SDK'sıyla yerel beklemeyi iptal edin

solvethree tarafından3 dk okuma

Yerel beklemeyi durdurmak için solve işlemine bir AbortController sinyali geçirin. Görev kimliğini almadan çağrı sonlansa bile kurtarma yapabilmek için SDK'yı çağırmadan önce requestId dâhil tüm görev girdisini kaydedin.

Bu sayfada

İsteği kaydedin, ardından sinyali geçirin

API anahtarınızı sunucu tarafında tutarak Node.js 22 veya üzeri bir sürümde resmî JavaScript SDK'sını kullanın. Örnekteki ana makine adı ve eylemi hedef değerlerinizle değiştirin, etkin bir site profili yapılandırın ve proxy ortam değişkenini ayarlayın.

Örnek, solve çağrısından önce bir requestId üretir. Bu kimliği ve değiştirilmemiş görev girdisini yalnızca hata işleyicisinde değil, çağrıdan önce kalıcı olarak kaydedin. Kurtarma sırasında yeni bir kimlik üretmek, özgün istekle bağlantıyı kaybettirir.

Node.js · kurtarma kimlikleriyle iptal
import { randomUUID } from 'node:crypto';
import { Solvethree, SolvethreeError, TaskFailedError } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const task = { site: 'accounts.example.com', action: 'login', proxy: process.env.SOLVETHREE_PROXY, requestId: randomUUID() };
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 5000);
try {
  const result = await client.solve(task, { signal: controller.signal, timeoutMs: 180000 });
  console.log('Ready task:', result.id);
  // Submit this result with its browser identity and original proxy.
} catch (error) {
  if (error instanceof TaskFailedError) {
    console.error('Failed task:', error.taskId, error.errorCode);
  } else if (error instanceof SolvethreeError) {
    console.error('Recovery IDs:', error.requestId ?? task.requestId, error.taskId);
    // If taskId exists, retrieve it. Otherwise replay the unchanged task with
    // this requestId. Canceling local waiting did not cancel the remote task.
  }
  throw error;
} finally { clearTimeout(timer); }

Beş saniyelik zamanlayıcı abort çağrısını yapar; signal, bu denetleyiciyi SDK işlemine bağlar. Ayrı timeoutMs değeri, çözüm için son süreyi 180 saniye olarak belirler. Her ikisi de beklemeyi sonlandırabilir; bu nedenle iki durum için de kurtarma bilgilerini saklayın. İşlem önce tamamlanırsa finally bloğu zamanlayıcıyı temizler.

Elinizdeki kimliklerle kurtarma yapın

catch bloğu kurtarma kimliklerini günlüğe kaydeder ve hatayı yeniden fırlatır; görevi sürdürmez. Çağıran kodunuzun bu kimlikleri saklaması ve uygun kurtarma yolunu seçmesi gerekir.

  • Nihai başarısızlık: Örnekte olduğu gibi önce TaskFailedError hatasını ele alın. errorCode alanını ve hata mesajını inceleyin, ardından başarısız olan bu görevi sorgulamayı bırakın.
  • Bilinen görev kimliği: SolvethreeError.taskId mevcutsa aynı kimliği kullanarak getTask ile sorgulamayı sürdürün. Yalnızca sorgulamayı sürdürmek için solve işlemini yeniden çağırmayın.
  • Görev kimliği yok: Kaydedilen, değiştirilmemiş görevi aynı requestId ile createTask işlemine geçirerek oluşturma sonucunu geri alın. Varsa hatadaki requestId değerini, yoksa çağrıdan önce kaydedilen kimliği kullanın. Bağlantının kesilmesi, oluşturmanın başarısız olduğunu kanıtlamaz.

Aynı girdileri aynı requestId ile yeniden göndermek mevcut görevi döndürür. Bu kimliği yeniden kullanırken girdileri değiştirmek çakışmaya yol açar; bu nedenle kurtarma sırasında proxy, ana makine adı veya eylemi değiştirmeyin.

Görevi sorgularken pending ve solving, seçtiğiniz yerel sınır içinde beklemeye devam etmeniz gerektiğini belirtir. Yalnızca ready kullanılabilir bir çözüm içerir. failed durumunda durun ve hata ayrıntılarını inceleyin.

İptal ve kurtarmayı sınırlı bir bekleme süresiyle test edin

  1. 1.

    Bir test isteği kaydedin

    Örneği çalıştırmadan önce tüm görev girdisini ve requestId değerini kaydedin. Bu değerleri test boyunca saklayın.

  2. 2.

    İlk çağrının nasıl sonlandığını gözlemleyin

    Beş saniyelik zamanlayıcı tetiklendiğinde işlem hâlâ bekliyorsa oluşan hatayı ve kurtarma kimliklerini kaydedin. Hazır bir sonuç veya nihai başarısızlık daha önce gelebilir; böyle bir çalıştırmada iptal mekanizması test edilmiş olmaz.

  3. 3.

    Aynı görevi sürdürün

    Görev kimliğini almak için yukarıdaki kurtarma yolunu kullanın, ardından bu kimlikle ve waitMs değeri 15000 olacak şekilde getTask çağrısı yapın. Sorgulama denemelerinin sayısını sınırlayın veya yerel bir test son süresi belirleyin. Bu sınıra ulaşıldığında görev hâlâ pending veya solving durumundaysa başka bir görev oluşturmak yerine daha sonra sürdürmek için kimliğini saklayın.

Özgün görev kimliği zaten biliniyorsa kurtarmanın aynı kimliği döndürdüğünü kontrol edin. Bu, yerel iptali ve görev kurtarmayı kontrol eder; hedef web sitesinin elde edilen tokenı kabul edip etmediğini değil.

İlk görevinizi çalıştırın.

$5 çalışma alanı kredisiyle başlayın.

Çalışma alanı oluşturun
Node.js SDK'sıyla yerel beklemeyi iptal edin · solvethree