Wie erstelle ich mithilfe von ES6-Versprechungen ein Versprechen, ohne die Logik für dessen Lösung zu definieren? Hier ist ein einfaches Beispiel (etwas TypeScript):
var promises = {};
function waitFor(key: string): Promise<any> {
if (key in promises) {
return promises[key];
}
var promise = new Promise(resolve => {
// But I don't want to try resolving anything here :(
});
promises[key] = promise;
return promise;
}
function resolveWith(key: string, value: any): void {
promises[key].resolve(value); // Not valid :(
}
Mit anderen Versprechensbibliotheken ist das ganz einfach. JQuery's zum Beispiel:
var deferreds = {};
function waitFor(key: string): Promise<any> {
if (key in promises) {
return deferreds[key].promise();
}
var def = $.Deferred();
deferreds[key] = def;
return def.promise();
}
function resolveWith(key: string, value: any): void {
deferreds[key].resolve(value);
}
Die einzige Möglichkeit, dies zu tun, besteht darin, die Auflösungsfunktion irgendwo im Executor des Versprechens zu speichern, aber das scheint chaotisch zu sein, und ich bin nicht sicher, ob definiert ist, wann genau diese Funktion ausgeführt wird - wird sie immer sofort beim Aufbau ausgeführt?
Vielen Dank.