File: delay.js

package info (click to toggle)
node-tad 3.1.1%2B~cs11.22.49-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 3,400 kB
  • sloc: javascript: 25,549; makefile: 6
file content (40 lines) | stat: -rw-r--r-- 967 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Delay function execution, return promise for delayed function result

"use strict";

var isValue       = require("es5-ext/object/is-value")
  , callable      = require("es5-ext/object/valid-callable")
  , nextTick      = require("next-tick")
  , ensureTimeout = require("timers-ext/valid-timeout")
  , deferred      = require("../../deferred");

var apply = Function.prototype.apply, delayed;

delayed = function (fn, args, resolve, reject) {
	var value;
	try {
		value = apply.call(fn, this, args);
	} catch (e) {
		reject(e);
		return;
	}
	resolve(value);
};

module.exports = function (timeout) {
	var fn, result, delay;
	fn = callable(this);
	if (isValue(timeout)) {
		timeout = ensureTimeout(timeout);
		delay = setTimeout;
	} else {
		delay = nextTick;
	}
	result = function () {
		var def = deferred();
		delay(delayed.bind(this, fn, arguments, def.resolve, def.reject), timeout);
		return def.promise;
	};
	result.returnsPromise = true;
	return result;
};