L'attività viene visualizzata come completata, ma il download è un file vuoto? Stato di esecuzione e consegna separati

Il pulsante dice "Fine", ma quando faccio clic su Download, ottengo un file vuoto? Il problema spesso non è il testo del prompt, ma il fatto che il backend ricorda solo che l'algoritmo è stato eseguito, non se la consegna è pronta. Solo separando lo stato di esecuzione dallo stato di consegna il front-end può comunicare all'utente il reale avanzamento. Questo articolo spiega chiaramente l'idea della scissione.

La pagina dell'attività visualizza "Completato", ma quando faccio clic su Scarica, ottengo un file vuoto. Il problema spesso non è il testo del prompt in sé, ma che il backend registra solo la fine dell'esecuzione dell'algoritmo e non registra se la consegna è pronta. Questo articolo è scritto per gli sviluppatori che eseguono elaborazione di documenti, attività asincrone o integrazione di traduzioni. Dopo la lettura, saprai come separare lo stato di esecuzione e lo stato di consegna in modo che il front-end possa mostrare all'utente il reale progresso.

Gli esempi in questo articolo utilizzano campioni sintetici e il codice è stato sottoposto a controllo a campione in un ambiente isolato. Ciò non rappresenta una garanzia di tutti i file reali o degli effetti del prodotto. Prima di elaborare documenti importanti, conservare gli originali e rivederli rispettando i limiti e gli elementi di accettazione nel testo.

Il download è un file vuoto, ma l'attività viene visualizzata come completata? Conclusione di una frase

Per prima cosa dividi "elaborazione completata" in tre stati: elaborazione, prodotto e accettazione, quindi lascia che il front-end visualizzi solo lo stato confermato.

la tua situazionePratiche consigliatemotivo
L'attività è terminata, ma il file non è stato ancora generatoEntra nello stato "Prodotto pronto" e può essere scaricato senza mostrarlo in anticipo.La fine dell'elaborazione significa solo che il calcolo è stato interrotto, ma non significa che ci siano file che possono essere localizzati.
Il file è stato generato, ma il contenuto non è stato ancora controllatoContinua a "Controllare i risultati" e attendi l'accettazioneLa disponibilità del prodotto non significa rispettare l'accordo di consegna
Attività fallitaVisualizzare la fase e il motivo del guasto e fornire le azioni corrispondentiAnche il fallimento dovrebbe avere fasi e non può essere nascosto con un'icona rotante
Il download restituisce HTTP 200Continua a verificare il tipo, le dimensioni, la disponibilità dell'analisi e il contenuto previsto200 può corrispondere a una pagina di accesso, a un errore JSON o a un documento vuoto

Almeno distinguere tra lavorazione, prodotto e accettazione

La fine dell'elaborazione significa che il calcolo si è interrotto; il prodotto è pronto, il che significa che il file può essere localizzato; e l'accettazione è completata, il che significa che il file soddisfa l'accordo di consegna. Non necessariamente tutti e tre si verificano nello stesso momento.

Anche il fallimento dovrebbe avere fasi e non può essere nascosto da un'icona che ruota permanentemente. L'utente sa se si è verificato un errore durante l'elaborazione, la generazione o il controllo, quindi sa se attendere, riprovare o riparare l'input.

📊 Confronto fondamentale

statoDomande con rispostaÈ possibile promettere download agli utenti?
Fine della lavorazioneSe il calcolo è stato interrottonon può
Prodotto prontoEsiste un file che può essere individuatoNo, devo ancora controllare
Accettazione completataIl documento soddisfa l'accordo di consegna?Potere

Negare esplicitamente il successo nel salto

from enum import Enum

class State(Enum):
    PROCESSING = "processing"
    ARTIFACT_READY = "artifact_ready"
    VERIFIED = "verified"
    FAILED = "failed"

def transition(state, event):
    allowed = {
        (State.PROCESSING, "stored"): State.ARTIFACT_READY,
        (State.PROCESSING, "error"): State.FAILED,
        (State.ARTIFACT_READY, "checks_passed"): State.VERIFIED,
        (State.ARTIFACT_READY, "error"): State.FAILED,
    }
    if (state, event) not in allowed:
        raise ValueError("invalid state transition")
    return allowed[(state, event)]

s = transition(State.PROCESSING, "stored")
assert s is State.ARTIFACT_READY
assert transition(s, "checks_passed") is State.VERIFIED
assert transition(s, "error") is State.FAILED
try:
    transition(State.PROCESSING, "checks_passed")
except ValueError:
    pass
else:
    raise AssertionError("cannot skip artifact readiness")

Questa macchina a stati sintetici non include l'annullamento della coda, la revisione e l'eliminazione della scadenza. Le implementazioni di produzione dovrebbero scalare in base al business, piuttosto che stipare tutti gli eventi in un binario "successo/fallimento".

I messaggi asincroni possono anche essere ripetuti o non ordinati, richiedendo la cooperazione di numeri di versione, transazioni ed elaborazione idempotente. In caso contrario, i vecchi messaggi potrebbero sovrascrivere il nuovo stato e la stessa attività potrebbe essere scritta ripetutamente.

Le richieste del front-end dovrebbero corrispondere ai fatti

Ogni stato sul front-end dovrebbe corrispondere a un fatto che può essere confermato dal back-end e fornire le azioni disponibili corrispondenti.

statoGli utenti possono vedereAzioni disponibili
processingElaborazioneControlla l'avanzamento o annulla
artifact_readyControllo dei risultatiDisponibile senza impegno preventivo
verifiedFile scaricabileScarica e visualizza le istruzioni di accettazione
failedFasi e cause del guastoCorreggi o riprova in base al motivo

Anche se il download ha esito positivo, ciò non significa che il contenuto sia corretto.

HTTP 200 potrebbe restituire una pagina di accesso, un JSON non valido o un documento vuoto. L'accettazione dovrebbe almeno verificare i seguenti elementi:

  • Tipo: se il formato del file è quello previsto
  • Dimensione: se il file è vuoto o ovviamente anormale
  • Disponibilità analisi: se il file può essere aperto e analizzato normalmente
  • Contenuto previsto: se il contenuto è coerente con i requisiti dell'attività

Per la traduzione, l'integrità della lingua e la revisione della terminologia sono controlli di livello superiore e non devono essere sostituiti da "il file può essere aperto".

Mantieni lo stato trasparente quando integri le funzionalità di traduzione

Dopo aver effettuato l'accesso a OmniDoc (portale del prodotto), i tuoi prodotti dovrebbero comunque mantenere il proprio stato di conservazione e consegna. Una volta completata l'attività della piattaforma, è possibile mapparla prima su "Inizia a ricevere risultati", quindi verrà visualizzato il successo dopo aver confermato che il file è disponibile. Ciò è più in linea con l'esperienza effettiva dell'utente rispetto alla trasmissione diretta di uno stato.

Riferimenti: Python enum

🎯Quale metodo è adatto a te?

se tu……

Se il tuo compito è solo il calcolo in background e non è presente un file di consegna esterno

È necessario registrare solo la fine della lavorazione e le fasi di fallimento e il prodotto e l'accettazione possono essere temporaneamente omessi.

Se è necessario consentire agli utenti di scaricare i risultati

È necessario attendere che il prodotto sia pronto e abbia superato l'accettazione prima che venga visualizzato come disponibile per il download.

Se hai accesso a una piattaforma di elaborazione di terze parti

Mappa il completamento della piattaforma su "Inizia a ricevere risultati", quindi visualizza l'esito positivo dopo aver confermato il file.

Se le attività possono essere ripetute o restituite fuori ordine

Aggiungi un numero di versione allo stato e assicurati che lo stato avanzi solo attraverso le transazioni e l'elaborazione idempotente.

❓ Domande frequenti (FAQ)

1. L'attività viene visualizzata come completata, perché non è ancora possibile scaricarla?

Poiché la fine dell'elaborazione significa solo che il calcolo è stato interrotto, è necessario anche confermare che il prodotto è pronto e ha superato l'accettazione, il che significa che il file soddisfa l'accordo di consegna.

2. Il download restituisce HTTP 200. Ciò significa che non ci sono problemi con il file?

incerto. HTTP 200 può restituire una pagina di accesso, un JSON non valido o un documento vuoto, richiedendo inoltre controlli su tipo, dimensione, disponibilità di analisi e contenuto previsto.

3. Perché lo stato di fallimento prevede fasi?

La fase di errore indica all'utente se il problema è in fase di elaborazione, generazione o controllo, in modo che possa decidere di attendere, riprovare o correggere l'input.

4. È sufficiente che il file possa essere aperto per le attività di traduzione?

non abbastanza. I controlli dell'integrità della lingua e della terminologia sono controlli di livello superiore e non devono essere sostituiti da "il file può essere aperto".

📝 Riepilogo

Solo separando lo stato di esecuzione e lo stato di consegna il front-end può comunicare all'utente il reale progresso. Solo quando il prodotto è pronto e supera l'accettazione dovrebbe essere visualizzato come disponibile per il download.

Provalo subito: carica il documento per iniziare la traduzione, mantenendo il layout originale

Aggiornato il 2026-11-14