java - F.Promise<Result> and nested async promises -


i using f.promise in async action in playframework 2.4.6. able async calls dao work. able use "map" , "flatmap" not sure following situation.

i have async call find , object database. if object found, want use parts of object issue async request update object in database. part of async update call in controller. not doing right though.

i starting off following.

f.promise<user> finduserpromise = userservice.findasync(id); f.promise<user> updateuserpromise = userservice.updateasync(updateduser);  f.promise<result> resultpromise = finduserpromise.flatmap((founduser){     // update founduser passed in json criteria     founduser.firstname = firstname; // etc...      return updateuserpromise.map((updateduser) -> {         return ok(json.tojson(u));     }); });  return resultpromise; 

this doesn't seem work. not want define updateduserpromise until response finduserpromise, because maybe user not found. if user not found, return f.promise.pure(notfound("some json result")). if user found, want update user json criteria gets posted controller action. approach, seems have define updateuserpromise's async call object (updateduser) before results.

can define promise inside result of promise?

i thinking this, fails compilation errors. inference variable b has incompatible bounds, equality constraints: play.mvc.result, lower bounds: play.libs.f.promise.

f.promise<user> finduserpromise = userservice.findasync(id);  f.promise<result> resultpromise = finduserpromise.map((founduser) -> {     // founduser returned, update it, or return not found...      // define our next promise updated founduser object     f.promise<user> userpromise = userservice.updateasync(founduser);     f.promise<result> resultpromise2 = userpromise.map((u) -> {         return jsonresult(ok(json.tojson(u)));     });     return resultpromise2;  });  return resultpromise; 

thanks help.

i not sure if best way this, working situation above.

f.promise<user> finduserpromise = userservice.findasync(id);  return finduserpromise.flatmap((fu) -> {      if (fu == null) {         objectnode result = json.newobject();         result.put("error", "not found " + id);         return f.promise.pure(jsonresult(notfound(result)));     }      // dynamically update fields on found user     fu.username = username;     fu.firstname = firstname;     // more updates...      // make new promise use updated founduser object     f.promise<user> updateuserpromise = userservice.updateasync(fu);      return updateuserpromise.map((uu) -> {         return jsonresult(ok(json.tojson(uu)));     }); } 

all examples found chaining promises or nested promises, seem use web services example, , appear known @ design time. in situation, not know founduser object until returned, need create inner promise inside outer promise.


Comments

Popular posts from this blog

gridview - Yii2 DataPorivider $totalSum for a column -

java - Suppress Jboss version details from HTTP error response -

Sass watch command compiles .scss files before full sftp upload -