Ich habe Web Audio API mit Typoskript experimentiert. Ich bin dabei, eine Klasse AudioDownloader
zu erstellen, die die Audiodaten für eine einzelne oder mehrere Audiodateien herunterlädt und eine oder mehrere Versprechen zurückgibt. Im Fall des Herunterladens mehrerer Audiodateien möchte ich nicht, dass die Promise.all
wegen eines einzelnen Fehlers fehlschlägt, also verwendete ich eine Methode namens reflect
(die ich aus dem Netz ausgeliehen habe).Versprechen Probleme in Typoskript
Aus irgendeinem Grund fehlschlägt die Typoskript-Kompilierung in der download
-Methode aufgrund von Fehlübereinstimmung im Rückgabetyp. Ich habe versucht, dies für die letzten zwei Tage ohne Glück zu sortieren. Ich verstehe wirklich nicht, was ich hier mache. Kann mir bitte jemand helfen?
class PromiseResult<T> {
value: T;
error?: any;
status: PromiseStatus;
}
enum PromiseStatus {
Resolved,
Rejected
}
function reflect<T>(promise: Promise<T>): Promise<PromiseResult<T>> {
return promise.then(v => {
return { status: PromiseStatus.Resolved, value: v };
}, e => {
return { status: PromiseStatus.Rejected, error: e }
});
}
type AudioDownloadResult = PromiseResult<AudioBuffer>;
class AudioDownloader {
private readonly context: AudioContext;
constructor(context: AudioContext) {
this.context = context;
}
download(urls: string | Array<string>): Promise<AudioDownloadResult | Array<AudioDownloadResult>> {
if (typeof urls === 'string') {
return reflect(this.downloadOne(urls as string));
}
return Promise.all((<Array<string>>urls).map(this.downloadOne).map(reflect));
}
private downloadOne(url: string): Promise<AudioDownloadResult> {
return new Promise((resolve, reject) => {
const req = new XMLHttpRequest();
req.open('GET', url, true);
req.responseType = 'arraybuffer';
req.addEventListener('load',() => {
this.context.decodeAudioData(req.response).then(buffer => {
resolve(buffer);
}, reject);
}, false);
req.addEventListener('error', reject, false);
req.send();
});
}
}
Ich fand das Problem im Code der Rückgabetyp von 'downloadOne' Methode sollte' Promise 'nicht' Promise ' –
VJAI