* Constructs a promise for an immediate reference, passes promises through, or * coerces promises from different systems. * @param value immediate reference or promise
(value)
| 18633 | * @param value immediate reference or promise |
| 18634 | */ |
| 18635 | function Q(value) { |
| 18636 | // If the object is already a Promise, return it directly. This enables |
| 18637 | // the resolve function to both be used to created references from objects, |
| 18638 | // but to tolerably coerce non-promises to promises. |
| 18639 | if (value instanceof Promise) { |
| 18640 | return value; |
| 18641 | } |
| 18642 | |
| 18643 | // assimilate thenables |
| 18644 | if (isPromiseAlike(value)) { |
| 18645 | return coerce(value); |
| 18646 | } else { |
| 18647 | return fulfill(value); |
| 18648 | } |
| 18649 | } |
| 18650 | Q.resolve = Q; |
| 18651 | |
| 18652 | /** |