Невозможно передать два параметра в качестве аргумента функции Javascript - PullRequest
1 голос
/ 10 июня 2019

Я пытаюсь использовать karate.call для вызова функции файла JS, получающего два аргумента (String, Array of String). Однако массив строк не будет передан в файл JS.

Файл JS содержит:

function(query, fragments) {
// Here lies some code
// One of them includes fragments.length;
}

И я вызываю функцию JS для другого файла JS следующим образом:

//var query = 'Some string';
//var fragments = ['fragment1', 'fragment2'];
var clean = karate.call('../helper/helper.js', [query, fragments]);

Я могу передать запрос, который является строкой. Но я не смог передать массив строк. Ошибка говорит:

TypeError: Cannot read property "length" from undefined

Кажется, что массив строк не был передан в функцию JS. Любая помощь будет оценена. Спасибо!

Ответы [ 4 ]

2 голосов
/ 10 июня 2019

Вы можете сначала прочитать свою функцию и вызвать ее так же, как любую другую функцию js

var myFun = karate.read('../helper/helper.js');
var funCall = myFun(query, fragments);

или

 var myCall = karate.read('../helper/helper.js')(query, fragments);

это должно работать.

1 голос
/ 10 июня 2019

call метод принимает разделенные запятыми параметры и apply принимает массив, поэтому вам нужно заменить call на apply.ваш код выглядит как

function karate(query, fragments) {
// Here lies some code
// One of them includes fragments.length;
}

var clean = karate.apply('../helper/helper.js', [query, fragments]);
1 голос
/ 10 июня 2019

.call принимает параметры как значения, разделенные запятыми, вам нужно использовать .apply, если вы хотите передать значения в виде массива.

var clean = karate.call('../helper/helper.js', query, fragments);

будет работать ...

0 голосов
/ 10 июня 2019
 var clean = karate.call('../helper/helper.js', query, fragments);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

...