[Resolvido] Erro numa linha de script que não tenho

Usei um script para cálculo de distância baseado em raio.
Mas o erro aponta na linha 62 e meu script só tem 52 linhas.
Parece ser um erro interno do Blip, não?

Aqui o erro:

“System.ArgumentException: Can only invoke functions\n at Jint.Runtime.ExceptionHelper.ThrowArgumentException(String message, String paramName)\n at Jint.Runtime.ExceptionHelper.ThrowArgumentException(String message)\n at Jint.Runtime.ExceptionHelper.ThrowArgumentException[T](String message)\n at Jint.Engine.Invoke(JsValue value, Object thisObj, Object[] arguments)\n at Jint.Engine.Invoke(String propertyName, Object thisObj, Object[] arguments)\n at Jint.Engine.Invoke(String propertyName, Object[] arguments)\n at Take.Blip.Builder.Actions.ExecuteScript.ExecuteScriptAction.ExecuteAsync(IContext context, ExecuteScriptSettings settings, CancellationToken cancellationToken)\n at Takenet.Iris.Application.TemplateHosting.Templates.Builder.MetricsActionDecorator.ExecuteAsync(IContext context, JObject settings, CancellationToken cancellationToken) in /usr/app/src/Applications/Takenet.Iris.Application.TemplateHosting/Templates/Builder/MetricsActionDecorator.cs:line 62\n at Take.Blip.Builder.FlowManager.ProcessActionsAsync(LazyInput lazyInput, IContext context, Action[] actions, ICollection`1 actionTraces, CancellationToken cancellationToken)”

Aqui meu script:

function distance(lat1, lon1) {
    var lat2 = -27.0757048;
    var lon2 = -52.7158428;
    var unit = "K";
	if ((lat1 == lat2) && (lon1 == lon2)) {
		return 0;
	}
	else {
		var radlat1 = Math.PI * lat1/180;
		var radlat2 = Math.PI * lat2/180;
		var theta = lon1-lon2;
		var radtheta = Math.PI * theta/180;
		var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
		if (dist > 1) {
			dist = 1;
		}
		dist = Math.acos(dist);
		dist = dist * 180/Math.PI;
		dist = dist * 60 * 1.1515;
		if (unit=="K") { dist = dist * 1.609344 }
		if (unit=="N") { dist = dist * 0.8684 }
		return dist;
	}
}

Já passei o código por vários validadores e melhoradores, então aqui está a versão final, ainda dando erro:

function distance(lat1, lon1) {
  const lat2 = -27.0757048;
  const lon2 = -52.7158428;
  const unit = 'K';
  if ((lat1 === lat2) && (lon1 === lon2)) {
    return 0;
  }

  const radlat1 = Math.PI * (lat1 / 180);
  const radlat2 = Math.PI * (lat2 / 180);
  const theta = lon1 - lon2;
  const radtheta = Math.PI * (theta / 180);
  const dist1 = Math.sin(radlat1) * Math.sin(radlat2);
  let dist = dist1 + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
  if (dist > 1) {
    dist = 1;
  }
  dist = Math.acos(dist);
  dist *= (180 / Math.PI);
  dist *= (60 * 1.1515);
  if (unit === 'K') { dist *= 1.609344; }
  if (unit === 'N') { dist *= 0.8684; }
  return (dist);
}

@Jhoni_Desb

Você conseguiu resolver?
Você inicia o script com a função distance() ou pela run() e invoca a distance()? Os parâmetros lat1 e lon1 estão sendo passados corretamente?
Aparentemente está tudo correto com o seu script.

Não consegui… todos os scripts de cálculo dão o mesmo erro.
Começo com function distance( exatamente como está postado ali.
Isso muda alguma coisa? Isso não seria apenas um mero nome de função?

E o que este erro diz?
Pra mim não diz nada.

Se existe algum erro no script, isso não deveria ser evidenciado?

Obrigado @Bruno

@Bruno
Eu acabei de rodar este mesmo script no CodePen e funcionou normalmente.

@Bruno acabei de mudar o nome da função de distance para run e funcionou!
Não sabia que isso era interpretado diferente dentro do Blip.
Acho que ele bloqueava eu invocar uma função externa por isso.

1 Curtida

Sim, @Jhoni_Desb

Por isso eu perguntei, no BLiP ele sempre começa pela run(). É como a main dele :slight_smile:

Que bom que funcionou