0
我目前正在使用Zendesk API並創建用戶。我正在使用CompletableFuture框架來執行創建用戶的操作,然後添加回調來處理結果。但是,createUsers()方法的結果是一個JobStatus對象,其狀態可能是「排隊」,「已完成」,「正在工作」。我希望只有當狀態爲「完成」時才能執行回調。這可能嗎?如果狀態爲「排隊」,我希望它一直等待,直到結果「完成」。只有當結果狀態完成時才執行CompletableFuture回調
對於此示例,假定列表包含一組要創建的用戶。
public void createEndUsers(Zendesk zd, List<User> usersToBeCreated){
final static CompletableFuture<JobStatus<User>> promise = new CompletableFuture<>();
promise.supplyAsync(() -> {
JobStatus<User> js = zd.createUsers(usersToBeCreated);
return js;
}).thenAccept(Testing::updateDB);
}
public void updateDB(JobStatus<User> resultObject){
//perform various operations on the JobStatus object
}
如果您沒有CompletableFuture,您會怎麼做?這裏沒有魔法,你需要輪詢JobStatus的狀態,或者createUsers應該被重寫爲不返回中間對象。 – john16384
createUsers不能被重寫,因爲它是Zendesk API的一部分,我不想幹涉它。至於其他方面,我可以簡單地做一個循環來檢查Zendesk API並更新JobStatus對象的狀態,並在狀態「完成」之前一直這樣做,但我希望有一種更優雅的方式在某些條件下回調。 – Kristianasp
有一個創建單個用戶的API調用。它似乎只在工作完成時纔會返回。看起來你可以直接調用其中的多個,直到你創建它們全部爲止。 – 2017-07-13 02:59:25