Using setTimeout on promise chain

The built-in function setTimeout uses callbacks. How can we create a promise-based alternative that can then be chained. We will need to use promise that would be resolved after ms milliseconds, so that we can add .then to it, like this:
function delay(t, v) {
return new Promise(function(resolve) {
setTimeout(resolve.bind(null, v), t)
});
}
Promise.prototype.delay = function(t) {
return this.then(function(v) {
return delay(t, v);
});
}
Promise.resolve("hello").delay(500).then(function(v) {
console.log(v);
});
The shorter ES6 version of the answer:
const delay = t => new Promise(resolve => setTimeout(resolve, t));
delay(3000).then(() => console.log('Hello'));
Please note that in this task resolve is called without arguments. We don’t return any value from delay, just ensure the delay.




