forDataAtCoordinate(coordinate, callback, request) {
    if (this.state == TileState.EMPTY && request === true) {
      this.state = TileState.IDLE;
      listenOnce(this, EventType.CHANGE, (e) => {
        callback(this.getData(coordinate));
      });
      this.loadInternal_();
    } else {
      if (request === true) {
        setTimeout(() => {
          callback(this.getData(coordinate));
        }, 0);
      } else {
        callback(this.getData(coordinate));
      }
    }
  }
Calls the callback (synchronously by default) with the available data
for given coordinate (or `null` if not yet loaded).
@param {import("../coordinate.js").Coordinate} coordinate Coordinate.
@param {function(*): void} callback Callback.
@param {boolean} [request] If `true` the callback is always async.
                              The tile data is requested if not yet loaded.