我正在创建一个REST API,它在循环中进行API调用。像这样:
@RequestMapping(value = "/sendmessages", method = RequestMethod.POST)
public ResponseEntity<String> sendMessage(ModelMap model,
HttpServletRequest req, HttpServletResponse res,
@RequestBody String requestBody) throws JSONException,
Exception {
JSONObject jsonObject = new JSONObject(requestBody);
JSONArray userIdArray = jsonObject.getJSONArray(ChatConstants.USER_IDS);
for (int i = 0; i < userIdArray.length(); ++i) {
pubnub.publish(SERVER, messageObject, new Callback() {
@Override
public void successCallback(String arg0, Object arg1) {
System.out.println(arg0);
System.out.println(arg1);
}
@Override
public void errorCallback(String arg0, PubnubError arg1) {
super.errorCallback(arg0, arg1);
System.out.println(arg0);
System.out.println(arg1);
}
});
}
return new ResponseEntity<String>(HttpStatus.OK);
}
我正在进行PubNub调用,这是一个异步调用,结果在回调中返回。我想在API调用中返回这些异步调用的输出。任何想法,我如何跟踪这些电话的结果?
答案 0 :(得分:1)
我将介绍一种基于2方法的解决方案。你已经有了sendMessage(),还需要一个checkMessageResult()。
在回调中,您可以将结果存储在某处(例如,存储在会话中的地图中)或“全局”中的结果。地图。
每次调用send消息都会返回一些sentRequestId。然后客户端不时检查通过sentRequestId的请求的状态。调用回调时,结果存储在地图Map中。 checkMessageResult()只返回sentRequestId的地图内容。