visitThrow()

in lib/generator.js [3240:3274]


  visitThrow(ast, level, env) {
    if (ast.expr.type === 'construct_model') {
      this.emit(`_err ${env.yieldFunc ? ':' : ''}= `, level);
      this.visitConstructModel(ast.expr, level, env);
      this.emit('\n');
    } else {
      this.emit(`_err ${env.yieldFunc ? ':' : ''}= dara.NewSDKError(`, level);
      this.visitObject(ast.expr, level, env, 'map[string]interface{}');
      this.emit(')\n');
    }
    if(env.runtimeBody && !this.noCompatible) {
      this.emit(`if dara.BoolValue(client.DisableSDKError) != true {\n`, level);
      this.emit(`_err = dara.TeaSDKError(_err)\n`, level + 1);
      this.emit(`}\n`, level);
    }

    if(env.try) {
      const tryStmt = env.try;
      env.try = null;
      this.visitCatch(tryStmt, level, env);
    } else if (!env.returnType) {
      this.emit(`return _err\n`, level);
    } else if (_name(env.returnType) === 'void') {
      if(env.yieldFunc){
        this.emit(`_yieldErr <- _err\n`, level);
        this.emit(`return\n`, level);
      } else if (env.hasThrow) {
        this.emit(`return _err\n`, level);
      } else {
        this.emit(`return\n`, level);
      }
    } else {
      this.emit(`return _result, _err\n`, level);
    }
  }