Ich habe eine harte Zeit, meinen Kopf um JQuery Versprechungen und verzögerte Objekte wickeln so bitte bitte mit mir. Ich sollte auch sagen, dass meine Anwendung React, Typescript und ES6 verwendet.Synchrone JQuery-Aufruf an Web-API
Lassen Sie sich sagen, ich habe ein Array von Objekten:
[{ Object }, { Object}, { Object }]
Was ich versuche für jedes Objekt im Array zu tun ist, einen Anruf mit einem anderen Parameter an eine API macht aus dem Objekt , rufen Sie die Antwort ab und führen Sie dann für die verbleibenden Objekte erneut einen Aufruf an dieselbe API aus. Im Grunde möchte ich diese Anrufe zusammenketten, damit ich eins nach dem anderen mache und sie dann in meinen Bewerbungsstatus einfüge.
Hier ist, was ich bisher habe, aber es ist offensichtlich nicht funktioniert:
private getData(options: any[]): void {
let promises: any[] = [];
options.map((option: any, key: number) => {
let deferred: JQueryDeferred<any> = $.Deferred();
deferred.done((response) => {
return this.getIndividual(option)
.done(response => {
console.log('done', response);
});
});
promises.push(deferred);
});
$.when.apply($, promises)
.then((response) => {
console.log('response', response);
}).fail((error) => {
console.log("Ajax failed");
})
.done(() => {
console.log('done');
});
}
private getIndividual(option: any) {
return apiCall(option.hashKey);
}
Haben Sie gelesen [diese kanonische QA] (https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call)? –
mit 'options.map' und effektiv das Ergebnis zu verwerfen ist sinnlos –
Mögliches Duplikat von [Resolve verspricht nacheinander (dh in der Reihenfolge)?] (Http://stackoverflow.com/questions/24586110/resolve-promises-one- after-another-ie-in-sequence) – Andreas