Node.js SDK'sıyla yerel beklemeyi iptal edin
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.
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
TaskFailedErrorhatasını ele alın.errorCodealanı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.taskIdmevcutsa aynı kimliği kullanarakgetTaskile sorgulamayı sürdürün. Yalnızca sorgulamayı sürdürmek içinsolveişlemini yeniden çağırmayın. - Görev kimliği yok: Kaydedilen, değiştirilmemiş görevi aynı
requestIdilecreateTaskişlemine geçirerek oluşturma sonucunu geri alın. Varsa hatadakirequestIddeğ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.
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.
İ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.
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.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.