function createAsyncQueuer<TValue, TSelected>(
fn,
initialOptions,
selector): SolidAsyncQueuer<TValue, TSelected>
function createAsyncQueuer<TValue, TSelected>(
fn,
initialOptions,
selector): SolidAsyncQueuer<TValue, TSelected>
Definiert in: async-queuer/createAsyncQueuer.ts:120
Erstellt eine Solid-kompatible AsyncQueuer-Instanz zur Verwaltung einer asynchronen Warteschlange von Elementen, die Solid-Signale für alle zustandsbehafteten Eigenschaften bereitstellt.
Merkmale
Aufgaben werden parallel bis zum konfigurierten Parallelitätslimit verarbeitet. Wenn eine Aufgabe abgeschlossen ist, wird die nächste ausstehende Aufgabe verarbeitet, wenn das Parallelitätslimit dies zulässt.
Fehlerbehandlung
Der Hook verwendet TanStack Store für reaktives Zustandsmanagement. Der Parameter selector ermöglicht es Ihnen anzugeben, welche Zustandsänderungen ein erneutes Rendern auslösen, wodurch die Leistung optimiert wird, indem unnötige erneute Renderings verhindert werden, wenn irrelevante Zustandsänderungen auftreten.
Standardmäßig erfolgen keine reaktiven Zustands-Subscriptions und Sie müssen das Zustands-Tracking durch Bereitstellen einer Selector-Funktion aktivieren. Dies verhindert unnötige Renderings und gibt Ihnen die volle Kontrolle darüber, wann Ihre Komponente aktualisiert wird. Nur wenn Sie einen Selector bereitstellen, wird die Komponente neu gerendert, wenn sich die ausgewählten Zustandswerte ändern.
Verfügbare Zustandseigenschaften
Beispielanwendung
// Default behavior - no reactive state subscriptions
const asyncQueuer = createAsyncQueuer(async (item) => {
// process item
return await fetchData(item);
}, {
initialItems: [],
concurrency: 2,
maxSize: 100,
started: false,
onSuccess: (result) => {
console.log('Item processed:', result);
},
onError: (error) => {
console.error('Processing failed:', error);
}
});
// Opt-in to re-render when queue state changes (optimized for UI updates)
const asyncQueuer = createAsyncQueuer(
async (item) => await fetchData(item),
{ concurrency: 2, started: true },
(state) => ({
pendingItems: state.pendingItems,
activeItems: state.activeItems,
isRunning: state.isRunning
})
);
// Opt-in to re-render when processing metrics change (optimized for tracking progress)
const asyncQueuer = createAsyncQueuer(
async (item) => await fetchData(item),
{ concurrency: 2, started: true },
(state) => ({
successCount: state.successCount,
errorCount: state.errorCount,
settleCount: state.settleCount
})
);
// Add items to queue
asyncQueuer.addItem(newItem);
// Start processing
asyncQueuer.start();
// Access the selected state (will be empty object {} unless selector provided)
const { pendingItems, activeItems } = asyncQueuer.state();
// Default behavior - no reactive state subscriptions
const asyncQueuer = createAsyncQueuer(async (item) => {
// process item
return await fetchData(item);
}, {
initialItems: [],
concurrency: 2,
maxSize: 100,
started: false,
onSuccess: (result) => {
console.log('Item processed:', result);
},
onError: (error) => {
console.error('Processing failed:', error);
}
});
// Opt-in to re-render when queue state changes (optimized for UI updates)
const asyncQueuer = createAsyncQueuer(
async (item) => await fetchData(item),
{ concurrency: 2, started: true },
(state) => ({
pendingItems: state.pendingItems,
activeItems: state.activeItems,
isRunning: state.isRunning
})
);
// Opt-in to re-render when processing metrics change (optimized for tracking progress)
const asyncQueuer = createAsyncQueuer(
async (item) => await fetchData(item),
{ concurrency: 2, started: true },
(state) => ({
successCount: state.successCount,
errorCount: state.errorCount,
settleCount: state.settleCount
})
);
// Add items to queue
asyncQueuer.addItem(newItem);
// Start processing
asyncQueuer.start();
// Access the selected state (will be empty object {} unless selector provided)
const { pendingItems, activeItems } = asyncQueuer.state();
• TValue
• TSelected = {}
(value) => Promise<any>
AsyncQueuerOptions<TValue> = {}
(state) => TSelected
SolidAsyncQueuer<TValue, TSelected>
Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.