Futures und Versprechungen entstanden in der funktionalen Programmierung und verwandten Paradigmen (z. B. Logikprogrammierung), um einen Wert (eine Zukunft) von der Berechnung (ein Versprechen) zu entkoppeln, so dass die Berechnung flexibler durchgeführt werden konnte, insbesondere durch Parallelisierung. Später fand es Verwendung in verteilter Datenverarbeitung, bei der Verringerung der Latenz von Kommunikations-Rundreisen. Später noch, es gewann mehr Verwendung durch das Schreiben asynchroner Programme im direkten Stil, anstatt in Fortsetzung-Passing-Stil. Viele Entwickler (vor allem diejenigen, die gerade anfangen, Versprechungen zu verwenden) bauen verschachtelte Konstruktionen wie beispiel unten: In der Informatik beziehen sich Zukunft, Versprechen, Verzögerung und verzögerte Konstrukte, die zum Synchronisieren der Programmausführung in einigen gleichzeitigen Programmiersprachen verwendet werden. Sie beschreiben ein Objekt, das als Proxy für ein Ergebnis fungiert, das zunächst unbekannt ist, in der Regel, weil die Berechnung seines Werts noch nicht abgeschlossen ist. Hier bedeutet “Plattformcode” Engine,Environment und Promise Implementation Code. In der Praxis stellt diese Anforderung sicher, dass onFulfilled und onRejected asynchron ausgeführt werden, nach dem Ereignisschleifenumdrehen, in dem dann aufgerufen wird, und mit einem neuen Stapel. Dies kann entweder mit einem “Makro-Task”-Mechanismus wie setTimeout oder setImmediate oder mit einem “Micro-Task”-Mechanismus wie MutationObserver oder process.nextTick implementiert werden. Da die Versprechensimplementierung als Plattformcode betrachtet wird, kann sie selbst eine Taskplanungswarteschlange oder ein “Trampolin” enthalten, in dem die Handler aufgerufen werden.

Die Zukunfts- und/oder Versprechenskonstrukte wurden zunächst in Programmiersprachen wie MultiLisp und Act 1 implementiert. Die Verwendung von Logikvariablen für die Kommunikation in gleichzeitigen Logik-Programmiersprachen war den Futures sehr ähnlich. Diese begannen in Prolog mit Freeze und IC Prolog und wurden zu einem wahren Parallelitäts-Primitiv mit Relational Language, Concurrent Prolog, bewachten Horn-Klauseln (GHC), Parlog, Strand, Vulcan, Janus, Oz-Mozart, Flow Java und Alice ML. Die Single-Zuweisung I-var aus Dataflow-Programmiersprachen, die ihren Ursprung in Id hat und in Reppys Concurrent ML enthalten ist, ähnelt der gleichzeitigen Logikvariablen. Das Versprechen-Abwicklungsverfahren ist eine abstrakte Operation, die als Eingabe ein Versprechen und einen Wert nimmt, die wir als [[Resolve]] (Versprechen, x) bezeichnen. Wenn x ein stolierbares ist, versucht es, versprechen den Zustand von x zu übernehmen, unter der Annahme, dass x sich zumindest ein wenig wie ein Versprechen verhält. Andernfalls erfüllt es versprechenmit dem Wert x. Einige Programmiersprachen unterstützen Futures, Versprechen, gleichzeitige Logikvariablen, Datenflussvariablen oder I-vars, entweder durch direkte Sprachunterstützung oder in der Standardbibliothek. Ein Versprechen stellt das letztendliche Ergebnis eines asynchronen Vorgangs dar.