Promises

A Promise represents a value that may not yet be computed. Any object that implements TAsyncPromise Trait << #TAsyncPromise tag: 'Base - Promises'; package: 'Futures' can be used as a Promise.

Promises can be chained and the type of the new chained promise depends on the state of chainable promise. In total there are the following kinds of Promises:

A Promise created from an existing value or a promise whose computation is succesfully finished is called fulfilled:

fulfilledPromise
	<gtExample>
	<return: #AsyncFulfilledPromise>
	^ 42 asAsyncPromise
    

A Promise created from an Exception Object << #Exception slots: { #messageText . #tag . #signaler . #signalContext . #handlerContext . #outerContext }; tag: 'Exceptions'; package: 'Kernel' or a promise whose computation failed is called rejected:

rejectedPromise
	<gtExample>
	<return: #AsyncRejectedPromise>
	^ [ 1 / 0 ] on: Error do: #asAsyncPromise
    

A Promise with a not yet computed value is called pending. Once computation is finished a pending promise becomes fulfilled or rejected:

promiseResolvingToString
	<gtExample>
	<return: #AsyncFuturePromise>
	^ [ 2 seconds wait.
	'Promised value' ] asAsyncPromise
    
promiseWithError
	<gtExample>
	<return: #AsyncFuturePromise>
	^ [ 2 seconds wait.
	1 / 0 ] asAsyncPromise