有没有办法在控制器外部使用await()机制?异步WS调用并在控制器外部等待()
我不希望代码在控制器中进行异步调用,而是让服务类中的代码可以被多个控制器重用,但是无法在控制器之外调用await,因为方法受到保护。
因此,例如控制器:
ServiceClass service = new My ServiceClass();
MyObject myObject= service.getMeAnObject();
render(myObject);
而服务类:
public class ServiceClass
{
...
public MyObject getMeAnObject()
{
String url = "http://...";
Promise<HttpResponse> promise = url(url).getAsync();
// do something here similar to await in a controller
// that suspends the code waiting for the response
// to be retrieved
HttpResponse response = promise.get();
return buildMyObjectFromResponse(reponse);
}
...
}
有没有办法实现类似的东西?
感谢您的帮助。
编辑:我也跟着佩尔的建议和提出的服务类实现控制器,它的工作原理然而,这是必要的控制器使用它来增强。我发现完成的唯一方法是至少调用一次调用控制器类中的await方法()。
但是,我仍然没有证实代码实际上是暂停的。
编辑2:一个建议我从谷歌组得到的是,我确实应该尝试做的await控制器,所以也许一个更好的解决办法是为服务返回一个 承诺,并有控制器等待这个,但然后 有没有办法给我todo那里呢?
因此,例如控制器:
ServiceClass service = new My ServiceClass();
Promise<MyObject> promise = service.getMeAnObject();
MyObject myObject = await(promise);
render(myObject);
而服务类:
public class ServiceClass
{
...
public Promise<MyObject> getMeAnObject()
{
String url = "http://...";
// Somehow Build a Promise<MyObject>
}
...
}
}
感谢您的回复。它似乎工作。然而,在我看来,这并不是最好的解决方案,因为服务等级在概念上并不是控制者。理想情况下,这种代码中断机制可以在任何地方使用。 –