code: public <D, F, P> Promise<D, F, P> when(Promise<D, F, P> promise, AndroidExecutionScope scope) {
  		if (promise instanceof AndroidDeferredObject) {
  			return promise;
  		}
  		return new AndroidDeferredObject<D, F, P>(promise, scope).promise();
  	}
docs: If a non-Android friendly promise is passed in, wrap it with {@link AndroidDeferredObject}
  so that callbacks can be executed in the corresponding execution scope.
  
  @param scope   Whether to execute in UI thread or Background thread
  @param promise A promise
  
  @return A promise wrapped in @{link AndroidDeferredObject}