Poller class
Eine Klasse, die die Definition eines Programms darstellt, das aufeinanderfolgende Anforderungen abruft, bis es einen Abschlussstatus erreicht.
Ein Poller kann manuell ausgeführt werden, indem Anforderung nach Anforderung abgerufen wird, indem die poll()
Methode wiederholt aufgerufen wird, bis ihr Vorgang abgeschlossen ist.
Es bietet auch eine Möglichkeit, zu warten, bis der Vorgang abgeschlossen ist, indem Sie aufrufen pollUntilDone()
und warten, bis der Vorgang abgeschlossen ist.
Poller können auch den Abbruch des laufenden Prozesses anfordern, für den der zugrunde liegende vorgang mit langer Ausführungsdauer bereitgestellt wird.
const poller = new MyPoller();
// Polling just once:
await poller.poll();
// We can try to cancel the request here, by calling:
//
// await poller.cancelOperation();
//
// Getting the final result:
const result = await poller.pollUntilDone();
Der Poller wird durch zwei Typen definiert, einen Typ, der den Zustand des Pollers darstellt, der einen grundlegenden Satz von Eigenschaften von PollOperationState<TResult>
enthalten muss, und einen durch definierten TResult
Rückgabetyp, der alles sein kann.
Die Poller-Klasse implementiert die PollerLike
Schnittstelle, sodass Pollerimplementierungen nicht direkt die Poller-Klasse exportieren müssen, sondern nur den bereits instanziierten Poller mit dem PollerLike-Typ exportieren.
class Client {
public async makePoller: PollerLike<MyOperationState, MyResult> {
const poller = new MyPoller({});
// It might be preferred to return the poller after the first request is made,
// so that some information can be obtained right away.
await poller.poll();
return poller;
}
}
const poller: PollerLike<MyOperationState, MyResult> = myClient.makePoller();
Ein Poller kann über seinen Konstruktor erstellt und dann abgefragt werden, bis er abgeschlossen ist. Der Zustand des Pollers kann jederzeit ohne Verzögerung über die getOperationState-Methode abgerufen werden. Die Zwischenformen des Ergebnistyps können jederzeit ohne Verzögerung angefordert werden. Sobald der zugrunde liegende Vorgang als abgeschlossen markiert wurde, wird der Poller beendet, und der endgültige Wert wird zurückgegeben.
const poller = myClient.makePoller();
const state: MyOperationState = poller.getOperationState();
// The intermediate result can be obtained at any time.
const result: MyResult | undefined = poller.getResult();
// The final result can only be obtained after the poller finishes.
const result: MyResult = await poller.pollUntilDone();
Konstruktoren
Poller(Poll |
Ein Poller muss initialisiert werden, indem mindestens die grundlegenden Eigenschaften von
Innerhalb dieses Konstruktors wird eine neue Zusage erstellt. Dies wird verwendet, um dem Benutzer mitzuteilen, wann der Abrufvorgang abgeschlossen ist (siehe Im Konstruktor einer benutzerdefinierten Implementierung eines Pollers sollte jede serialisierte Version des Vorgangs eines vorherigen Abfragevorgangs in den Vorgang deserialisiert werden, der an den Basiskonstruktor gesendet wird. Beispiel:
|
Methoden
cancel |
Versucht, den zugrunde liegenden Vorgang abzubrechen. Es empfängt nur optional ein Objekt mit einer abortSignal-Eigenschaft von @azure/abort-controller AbortSignalLike. Wenn es erneut aufgerufen wird, bevor er abgeschlossen ist, wird ein Fehler ausgelöst. |
get |
Gibt den Status des Vorgangs zurück.
Obwohl TState innerhalb einer beliebigen Erweiterung der Poller-Klasse derselbe Typ ist, können Implementierungen der Poller-Klasse anpassen, was für die Öffentlichkeit freigegeben wird, indem sie eine eigene Version der Beispiel:
Sie können dies in den Tests dieses Repositorys sehen, wechseln Sie zur Datei: |
get |
Gibt den Ergebniswert des Vorgangs zurück, unabhängig vom Zustand des Pollers. Je nach Implementierung kann der endgültige TResult-Wert nicht definiert oder unvollständig zurückgegeben werden. |
is |
Gibt true zurück, wenn der Poller die Abfrage abgeschlossen hat. |
is |
Gibt true zurück, wenn der Poller beendet wurde. |
on |
Ruft den bereitgestellten Rückruf auf, nachdem jede Abfrage abgeschlossen ist, und sendet den aktuellen Zustand des Abfragevorgangs. Es gibt eine Methode zurück, die verwendet werden kann, um den Empfang von Updates für die angegebene Rückruffunktion zu beenden. |
poll({ abort |
Gibt eine Zusage zurück, die aufgelöst wird, sobald eine einzelne Abfrageanforderung abgeschlossen ist. Dazu wird die Updatemethode des Pollers-Vorgangs aufgerufen. Es empfängt nur optional ein Objekt mit einer abortSignal-Eigenschaft von @azure/abort-controller AbortSignalLike. |
poll |
Gibt eine Zusage zurück, die nach Abschluss des zugrunde liegenden Vorgangs aufgelöst wird. |
stop |
Verhindert, dass der Poller weiterhin abfragt. |
to |
Gibt eine serialisierte Version des Abrufvorgangs zurück, indem die toString-Methode des Vorgangs aufgerufen wird. |
Details zum Konstruktor
Poller(PollOperation<TState, TResult>)
Ein Poller muss initialisiert werden, indem mindestens die grundlegenden Eigenschaften von PollOperation<TState, TResult>
übergeben werden.
Beim Schreiben einer Implementierung eines Pollers muss sich diese Implementierung mit der Initialisierung eines beliebigen benutzerdefinierten Zustands befassen, der über die grundlegende Definition des Pollers hinausgeht. Der grundlegende Poller geht davon aus, dass der Vorgang des Pollers bereits definiert wurde, zumindest seine grundlegenden Eigenschaften. Der folgende Code zeigt, wie Sie sich der Definition des Konstruktors eines neuen benutzerdefinierten Pollers nähern.
export class MyPoller extends Poller<MyOperationState, string> {
constructor({
// Anything you might need outside of the basics
}) {
let state: MyOperationState = {
privateProperty: private,
publicProperty: public,
};
const operation = {
state,
update,
cancel,
toString
}
// Sending the operation to the parent's constructor.
super(operation);
// You can assign more local properties here.
}
}
Innerhalb dieses Konstruktors wird eine neue Zusage erstellt. Dies wird verwendet, um dem Benutzer mitzuteilen, wann der Abrufvorgang abgeschlossen ist (siehe pollUntilDone()
). Die Resolve- und Reject-Methoden der Zusage werden auch intern verwendet, um zu steuern, wann alle Personen, die auf den Abschluss des Abrufs warten, aufgelöst oder abgelehnt werden sollen.
Im Konstruktor einer benutzerdefinierten Implementierung eines Pollers sollte jede serialisierte Version des Vorgangs eines vorherigen Abfragevorgangs in den Vorgang deserialisiert werden, der an den Basiskonstruktor gesendet wird. Beispiel:
export class MyPoller extends Poller<MyOperationState, string> {
constructor(
baseOperation: string | undefined
) {
let state: MyOperationState = {};
if (baseOperation) {
state = {
...JSON.parse(baseOperation).state,
...state
};
}
const operation = {
state,
// ...
}
super(operation);
}
}
new Poller(operation: PollOperation<TState, TResult>)
Parameter
- operation
-
PollOperation<TState, TResult>
Muss die grundlegenden Eigenschaften von PollOperation<State, TResult>
enthalten.
Details zur Methode
cancelOperation({ abortSignal?: AbortSignalLike })
Versucht, den zugrunde liegenden Vorgang abzubrechen. Es empfängt nur optional ein Objekt mit einer abortSignal-Eigenschaft von @azure/abort-controller AbortSignalLike.
Wenn es erneut aufgerufen wird, bevor er abgeschlossen ist, wird ein Fehler ausgelöst.
function cancelOperation(options?: { abortSignal?: AbortSignalLike }): Promise<void>
Parameter
- options
-
{ abortSignal?: AbortSignalLike }
Optionale Eigenschaften, die an die Updatemethode des Vorgangs übergeben werden.
Gibt zurück
Promise<void>
getOperationState()
Gibt den Status des Vorgangs zurück.
Obwohl TState innerhalb einer beliebigen Erweiterung der Poller-Klasse derselbe Typ ist, können Implementierungen der Poller-Klasse anpassen, was für die Öffentlichkeit freigegeben wird, indem sie eine eigene Version der getOperationState
Methode schreiben und zwei Typen definieren, einen, der den internen Zustand des Pollers darstellt, und einen öffentlichen Typ, der eine sichere Teilmenge der Eigenschaften des internen Zustands darstellt.
Ihre Definition von getOperationState kann dann ihren öffentlichen Typ zurückgeben.
Beispiel:
// Let's say we have our poller's operation state defined as:
interface MyOperationState extends PollOperationState<ResultType> {
privateProperty?: string;
publicProperty?: string;
}
// To allow us to have a true separation of public and private state, we have to define another interface:
interface PublicState extends PollOperationState<ResultType> {
publicProperty?: string;
}
// Then, we define our Poller as follows:
export class MyPoller extends Poller<MyOperationState, ResultType> {
// ... More content is needed here ...
public getOperationState(): PublicState {
const state: PublicState = this.operation.state;
return {
// Properties from PollOperationState<TResult>
isStarted: state.isStarted,
isCompleted: state.isCompleted,
isCancelled: state.isCancelled,
error: state.error,
result: state.result,
// The only other property needed by PublicState.
publicProperty: state.publicProperty
}
}
}
Sie können dies in den Tests dieses Repositorys sehen, wechseln Sie zur Datei:../test/utils/testPoller.ts
und suchen Sie nach der getOperationState-Implementierung.
function getOperationState(): TState
Gibt zurück
TState
getResult()
Gibt den Ergebniswert des Vorgangs zurück, unabhängig vom Zustand des Pollers. Je nach Implementierung kann der endgültige TResult-Wert nicht definiert oder unvollständig zurückgegeben werden.
function getResult(): TResult | undefined
Gibt zurück
TResult | undefined
isDone()
Gibt true zurück, wenn der Poller die Abfrage abgeschlossen hat.
function isDone(): boolean
Gibt zurück
boolean
isStopped()
Gibt true zurück, wenn der Poller beendet wurde.
function isStopped(): boolean
Gibt zurück
boolean
onProgress((state: TState) => void)
Ruft den bereitgestellten Rückruf auf, nachdem jede Abfrage abgeschlossen ist, und sendet den aktuellen Zustand des Abfragevorgangs. Es gibt eine Methode zurück, die verwendet werden kann, um den Empfang von Updates für die angegebene Rückruffunktion zu beenden.
function onProgress(callback: (state: TState) => void): CancelOnProgress
Parameter
- callback
-
(state: TState) => void
Gibt zurück
poll({ abortSignal?: AbortSignalLike })
Gibt eine Zusage zurück, die aufgelöst wird, sobald eine einzelne Abfrageanforderung abgeschlossen ist. Dazu wird die Updatemethode des Pollers-Vorgangs aufgerufen. Es empfängt nur optional ein Objekt mit einer abortSignal-Eigenschaft von @azure/abort-controller AbortSignalLike.
function poll(options?: { abortSignal?: AbortSignalLike }): Promise<void>
Parameter
- options
-
{ abortSignal?: AbortSignalLike }
Optionale Eigenschaften, die an die Updatemethode des Vorgangs übergeben werden.
Gibt zurück
Promise<void>
pollUntilDone({ abortSignal?: AbortSignalLike })
Gibt eine Zusage zurück, die nach Abschluss des zugrunde liegenden Vorgangs aufgelöst wird.
function pollUntilDone(pollOptions?: { abortSignal?: AbortSignalLike }): Promise<TResult>
Parameter
- pollOptions
-
{ abortSignal?: AbortSignalLike }
Gibt zurück
Promise<TResult>
stopPolling()
Verhindert, dass der Poller weiterhin abfragt.
function stopPolling()
toString()
Gibt eine serialisierte Version des Abrufvorgangs zurück, indem die toString-Methode des Vorgangs aufgerufen wird.
function toString(): string
Gibt zurück
string