visitRuntimeBefore()

in lib/generator.js [815:838]


  visitRuntimeBefore(ast, level) {
    assert.equal(ast.type, 'object');
    this.emit('$_runtime = ', level);
    this.visitObject(ast, level);
    this.emit(';\n');
    this.emit('\n');
    this.emit('$_retriesAttempted = 0;\n', level);
    this.emit('$_lastRequest = null;\n', level);
    this.emit('$_lastResponse = null;\n', level);
    const retryContextName = this.getRealModelName(RETRY_CONTEXT);
    this.emit(`$_context = new ${retryContextName}([\n`, level);
    this.emit('\'retriesAttempted\' => $_retriesAttempted,\n', level + 1);
    this.emit(']);\n', level);
    this.emit('while (Dara::shouldRetry($_runtime[\'retryOptions\'], $_context)) {\n', level);
    this.emit('if ($_retriesAttempted > 0) {\n', level + 1);
    this.emit('$_backoffTime = Dara::getBackoffDelay($_runtime[\'retryOptions\'], $_context);\n', level + 2);
    this.emit('if ($_backoffTime > 0) {\n', level + 2);
    this.emit('Dara::sleep($_backoffTime);\n', level + 3);
    this.emit('}\n', level + 2);
    this.emit('}\n', level + 1);
    this.emit('\n');
    this.emit('$_retriesAttempted++;\n', level + 1);
    this.emit('try {\n', level + 1);
  }