Newer
Older
CVSS_3.0_GUI / node_modules / nwjs-builder-phoenix / node_modules / dir-compare / node_modules / bluebird / js / release / bind.js
root on 7 May 2019 1 KB Initial commit
  1. "use strict";
  2. module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {
  3. var calledBind = false;
  4. var rejectThis = function(_, e) {
  5. this._reject(e);
  6. };
  7.  
  8. var targetRejected = function(e, context) {
  9. context.promiseRejectionQueued = true;
  10. context.bindingPromise._then(rejectThis, rejectThis, null, this, e);
  11. };
  12.  
  13. var bindingResolved = function(thisArg, context) {
  14. if (((this._bitField & 50397184) === 0)) {
  15. this._resolveCallback(context.target);
  16. }
  17. };
  18.  
  19. var bindingRejected = function(e, context) {
  20. if (!context.promiseRejectionQueued) this._reject(e);
  21. };
  22.  
  23. Promise.prototype.bind = function (thisArg) {
  24. if (!calledBind) {
  25. calledBind = true;
  26. Promise.prototype._propagateFrom = debug.propagateFromFunction();
  27. Promise.prototype._boundValue = debug.boundValueFunction();
  28. }
  29. var maybePromise = tryConvertToPromise(thisArg);
  30. var ret = new Promise(INTERNAL);
  31. ret._propagateFrom(this, 1);
  32. var target = this._target();
  33. ret._setBoundTo(maybePromise);
  34. if (maybePromise instanceof Promise) {
  35. var context = {
  36. promiseRejectionQueued: false,
  37. promise: ret,
  38. target: target,
  39. bindingPromise: maybePromise
  40. };
  41. target._then(INTERNAL, targetRejected, undefined, ret, context);
  42. maybePromise._then(
  43. bindingResolved, bindingRejected, undefined, ret, context);
  44. ret._setOnCancel(maybePromise);
  45. } else {
  46. ret._resolveCallback(target);
  47. }
  48. return ret;
  49. };
  50.  
  51. Promise.prototype._setBoundTo = function (obj) {
  52. if (obj !== undefined) {
  53. this._bitField = this._bitField | 2097152;
  54. this._boundTo = obj;
  55. } else {
  56. this._bitField = this._bitField & (~2097152);
  57. }
  58. };
  59.  
  60. Promise.prototype._isBound = function () {
  61. return (this._bitField & 2097152) === 2097152;
  62. };
  63.  
  64. Promise.bind = function (thisArg, value) {
  65. return Promise.resolve(value).bind(thisArg);
  66. };
  67. };
Buy Me A Coffee