the current design of how the async support works was based on two assumptions
1. futures would be passed into soy, rather than calculated as a side effect of rendering
2. it would be valuable to lazily evaluate lets in order to make progress before blocking on a potentially asynchronous input.
Obviously if you are calculating these async things as part of a soyfunction this doesn't really work. We have talked internally about providing support for SoyFunctions to return SoyValueProviders to enable these kinds of usecases, but for this to work well we would need to change the SoyFunction api and we haven't been sure how useful this would be.
Finally, i should note, that the soy evaluation model doesn't actually guarantee that we call each soy function exactly once. For this reason your soy functions should be idempotent and doing something like an httprequest from one could result in redundant work (without client side caching).
So for the time being i would recommend passing this data into the soy template as a parameter (or an $ij) rather than calculating it in a soy function.