Skip to content

Instantly share code, notes, and snippets.

@0xdevalias
Last active November 6, 2015 03:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 0xdevalias/1d3b44312d8a68ddbaa5 to your computer and use it in GitHub Desktop.
Save 0xdevalias/1d3b44312d8a68ddbaa5 to your computer and use it in GitHub Desktop.
A side by side comparison (now that I finally got it figured out!) of Play Framework v2.2.x promise unwrapping in Java and Scala.

Java/Scala Future/Promise Map

A side by side comparison (now that I finally got it figured out!) of Play Framework v2.2.x promise unwrapping in Java and Scala.

Java

  public Promise<ObjectNode> getEmployees(final Optional<String> filterEmail)
	{
		// Call the webservice
		Promise<Response> promiseOfEmployees = this.xero.getEmployees(filterEmail);
		
		// Map into an ObjectNode
		Promise<ObjectNode> promiseJson = promiseOfEmployees.map(new F.Function<WS.Response, ObjectNode>()
		{
			@Override
			public ObjectNode apply(final Response response) throws Throwable
			{
				JsonNode responseJson = response.asJson();

				ObjectNode json = Json.newObject();

				json.put("foo", "bar");

				return json;
			}
		});

		// Return
		return promiseJson;
	}

Scala

def getEmployees(filterEmail: Optional[String]): Promise[ObjectNode] = {
    // Call the webservice
    val promiseOfEmployees: Promise[Response] = this.xero.getEmployees(filterEmail)
    
    // Map into an ObjectNode
    val promiseJson: Future[ObjectNode] = promiseOfEmployees.wrapped().map { response =>
      val jsonResponse: JsonNode = response.asJson();
      val json: ObjectNode = Json.newObject()
      json.put("foo", "bar");
      json // Return
    }

    // Return
    return Promise.wrap(promiseJson)
  }

Scala (Implicit)

  def getEmployees(filterEmail: Optional[String]): Promise[ObjectNode] = {
    // Call the webservice
    val promiseOfEmployees = this.xero.getEmployees(filterEmail)

    // Map into an ObjectNode
    val promiseJson = promiseOfEmployees.wrapped().map { response =>
      val jsonResponse = response.asJson();
      val json = Json.newObject()
      json.put("foo", "bar");
      json // Return
    }

    // Return
    return Promise.wrap(promiseJson)
  }

<3 Glenn / devalias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment