I understand that delaying or yielding in the ESPAsyncWebServer library callbacks are a no-no. However, my callback function needs to query another device via the Serial port. This process is slow and will crash the ESP32 as a result.
Here is an example:
void getDeviceConfig(AsyncWebServerRequest *request) {
  AsyncResponseStream *response =
      request->beginResponseStream("application/json");
  StaticJsonDocument<1024> doc;
  JsonArray array = doc.createNestedArray("get");
  for (size_t i = 0; i < request->params(); i++)
    array.add(request->getParam(i)->value());
  serializeJson(doc, Serial);
  /* At this point, the remote device determines what is being asked for 
     and builds a response. This can take fair bit of time depending on 
     what is being asked (>1sec) */
  response->print(Serial.readStringUntil('\n'));
  request->send(response);
}
I looked into building a response callback. However, I would need to know ahead of time how much data the remote device will generate. There's no way for me to know this.
I also looked into using a chunked response. In this case, the library will continuously call my callback function until I return 0 (which indicates that there is no more data). This is a good start - but doesn't quite fit. I can't inform of the caller that there is definitely more data coming, I just haven't received a single byte yet. All I can do here is return 0 which will stop the caller.
Is there an alternative approach I could use here?
 
     
    