mirror of
				https://hub.gitmirror.com/https://github.com/gradle/gradle-build-action
				synced 2025-10-31 18:10:05 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| module.exports = function(Promise, INTERNAL) {
 | |
| var util = require("./util");
 | |
| var errorObj = util.errorObj;
 | |
| var isObject = util.isObject;
 | |
| 
 | |
| function tryConvertToPromise(obj, context) {
 | |
|     if (isObject(obj)) {
 | |
|         if (obj instanceof Promise) return obj;
 | |
|         var then = getThen(obj);
 | |
|         if (then === errorObj) {
 | |
|             if (context) context._pushContext();
 | |
|             var ret = Promise.reject(then.e);
 | |
|             if (context) context._popContext();
 | |
|             return ret;
 | |
|         } else if (typeof then === "function") {
 | |
|             if (isAnyBluebirdPromise(obj)) {
 | |
|                 var ret = new Promise(INTERNAL);
 | |
|                 obj._then(
 | |
|                     ret._fulfill,
 | |
|                     ret._reject,
 | |
|                     undefined,
 | |
|                     ret,
 | |
|                     null
 | |
|                 );
 | |
|                 return ret;
 | |
|             }
 | |
|             return doThenable(obj, then, context);
 | |
|         }
 | |
|     }
 | |
|     return obj;
 | |
| }
 | |
| 
 | |
| function doGetThen(obj) {
 | |
|     return obj.then;
 | |
| }
 | |
| 
 | |
| function getThen(obj) {
 | |
|     try {
 | |
|         return doGetThen(obj);
 | |
|     } catch (e) {
 | |
|         errorObj.e = e;
 | |
|         return errorObj;
 | |
|     }
 | |
| }
 | |
| 
 | |
| var hasProp = {}.hasOwnProperty;
 | |
| function isAnyBluebirdPromise(obj) {
 | |
|     try {
 | |
|         return hasProp.call(obj, "_promise0");
 | |
|     } catch (e) {
 | |
|         return false;
 | |
|     }
 | |
| }
 | |
| 
 | |
| function doThenable(x, then, context) {
 | |
|     var promise = new Promise(INTERNAL);
 | |
|     var ret = promise;
 | |
|     if (context) context._pushContext();
 | |
|     promise._captureStackTrace();
 | |
|     if (context) context._popContext();
 | |
|     var synchronous = true;
 | |
|     var result = util.tryCatch(then).call(x, resolve, reject);
 | |
|     synchronous = false;
 | |
| 
 | |
|     if (promise && result === errorObj) {
 | |
|         promise._rejectCallback(result.e, true, true);
 | |
|         promise = null;
 | |
|     }
 | |
| 
 | |
|     function resolve(value) {
 | |
|         if (!promise) return;
 | |
|         promise._resolveCallback(value);
 | |
|         promise = null;
 | |
|     }
 | |
| 
 | |
|     function reject(reason) {
 | |
|         if (!promise) return;
 | |
|         promise._rejectCallback(reason, synchronous, true);
 | |
|         promise = null;
 | |
|     }
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| return tryConvertToPromise;
 | |
| };
 | 
