diff --git a/promise/.eslintrc.json b/promise/.eslintrc.json new file mode 100644 index 0000000..95a6242 --- /dev/null +++ b/promise/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "globals": { "Promise": true } +} diff --git a/promise/sleep.js b/promise/sleep.js new file mode 100644 index 0000000..5e5c07a --- /dev/null +++ b/promise/sleep.js @@ -0,0 +1,21 @@ +"use strict"; + +var isValue = require("es5-ext/object/is-value") + , isPromise = require("es5-ext/object/is-promise") + , nextTick = require("next-tick") + , ensureTimeout = require("../valid-timeout"); + +module.exports = function (/* timeout */) { + var Constructor = isPromise(this) ? this.constructor : Promise; + var timeout = arguments[0]; + if (isValue(timeout)) timeout = ensureTimeout(timeout); + return new Constructor(function (resolve) { + if (isValue(timeout)) { + setTimeout(function () { + resolve(); + }, timeout); + } else { + nextTick(resolve); + } + }); +}; diff --git a/test/promise/sleep.js b/test/promise/sleep.js new file mode 100644 index 0000000..1c7e796 --- /dev/null +++ b/test/promise/sleep.js @@ -0,0 +1,34 @@ +"use strict"; + +var delay = require("../../delay"); + +module.exports = function (t, a) { + if (typeof Promise !== "function") return null; + return { + Tick: function (d) { + var isInvoked = false; + t().then(function (result) { + isInvoked = true; + delay(function () { + a(result, undefined); + d(); + })(); + }, delay(d)); + a(isInvoked, false); + }, + Timeout: function (d) { + var isInvoked = false; + t(100).then( + delay(function (result) { + isInvoked = true; + a(result, undefined); + d(); + }), + delay(d) + ); + setTimeout(function () { + a(isInvoked, false); + }, 50); + } + }; +};