Javascriptin lupaukset eli ’promiset’

#!/usr/bin/env node

'use strict';

/* Esimerkki Javascriptin lupauksista. Funktio equals_promise palauttaa lupauksen,
   joka pidetään (fulfill) 3 sekunnin kuluttua, mikäli sille syötetyt luvut olivat
   yhtä suuria, muussa tapauksessa petetään (reject) 2 sekunnin kuluttua. Tästä
   syystä ohjelman pitäisi tulostaa ilmoitus toisen lupauksen pettämisestä lontoon
   kielellä sekuntia ennen kuin ensimmäisen lupauksen pitämisestä ilmoitetaan. */

equals_promise(3, 3)
    .then(() => {
	console.log('First promise was fulfilled.');
    }).catch(() => {
	console.log('First promise was rejected.');
    });

equals_promise(1, 4)
    .then(() => {
	console.log('Second promise was fulfilled.');
    }).catch(() => {
	console.log('Second promise was rejected.');
    });

function equals_promise(x, y) {
    return new Promise(function(fulfill, reject) {
	if (x === y) {
	    setTimeout(() => {
		fulfill();
	    }, 3000);
	} else {
	    setTimeout(() => {
		reject();
	    }, 2000);
	}
    });
}