В рамках этих двух функций;
url путь меняется.url; Функция parameters - это изменения.Я пробовал несколько вариантов именования и использования, чтобы объединить эти функции, но безуспешно! Как я могу использовать только функцию? Заранее спасибо.
function RunTestCases (name, foo, folder, host) {
host = host || DynamicHost();
folder = folder || 'FooFolderPath';
return {
title: name,
hostPageUrl: host,
url: folder + foo + '/'+ name +'.T.js'
};
}
function RunMonkeyTestCase (name, folder, host) {
host = host || DynamicHost();
folder = folder || 'FooFolderPath';
return {
title: name,
hostPageUrl: host,
url: folder + name +'.T.js'
};
}
//Usage of Functions;
RunTestCases('NameParam', 'FooParam');
RunMonkeyTestCase('NameParam', 'BarFolderPath', 'BarHostParam');
//For some specific usages.
RunTestCases('NameParam', 'FooParam', 'BarFolderPath', 'BarHostParam');
RunMonkeyTestCase('NameParam', null, 'FooHostParam');



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно объединить функции в одну? Попробуй.
function Test (title, foo, folder = 'FooFolderPath', hostPageUrl = DynamicHost()) {
return {
title,
hostPageUrl,
url: folder + (foo ? foo + '/' : '') + title + '.T.js'
};
}
//Usage of Functions;
Test('NameParam', 'FooParam')
Test('NameParam', null, 'BarFolderPath', 'BarHostParam')
а почему вы определили FooFolderPath для folder в params? Я записал его в фигурные скобки как; folder = folder || FooFolderPath` и работает нормально.
это параметр по умолчанию в js. Это должно работать как folder = folder || FooFolderPatne, но более очевидно
Также я проверил опцию function Test (name, foo, folder = 'FooFolderPath', host = DynamicHost()) { и удалил host = host || DynamicHost()Вроде работает! Не могли бы вы проверить? Это более элегантный вариант
Точно! сработало и наряднее! Но вы пропустили состояние title в конфиге url;) Так и должно быть: url: folder + (foo ? foo + '/' : '') + title +'.T.js'
Сохраняйте порядок параметров одинаковым в обеих функциях, а затем, наконец, добавьте foo в параметр, а затем выполните что-то вроде ниже:
function TestCase(name, folder, host, foo) {
host = host || DynamicHost();
folder = folder || 'FooFolderPath';
let url;
if (foo) {
url = folder + foo + '/' + name + '.T.js';
} else {
url = folder + name + '.T.js'
}
return {
title: name,
hostPageUrl: host,
url: url
};
}
console.info(TestCase('NameParam', 'BarFolderPath', 'BarHostParam', 'FooParam'));
console.info(TestCase('NameParam', 'BarFolderPath', 'BarHostParam'));
console.info(TestCase('NameParam', 'FooParam', 'BarFolderPath', 'BarHostParam'));
console.info(TestCase('NameParam', 'FooHostParam'));Вероятно, было бы немного чище, если бы вы сначала создали объект, а затем условно добавили свойство url. Это дает вам гораздо меньше дублирования и единую инструкцию возврата. Также вы пропустили их вызов DynamicHost
@ Мари с тобой согласна. Пожалуйста, посмотрите сейчас
@VicJordan Я кое-что изменил, чтобы прицелиться и это сработало; host = host || DynamicHost(); и if (foo !== undefined) {. Нежелательным является то, что я должен был вызвать функцию с null для некоторого использования :( как RunTestCases('nameparam', null, null, 'fooparam')). Так могу ли я как-то избежать использования null?
@VicJordan Я только что отредактировал свой пост: я забыл указать DynamicHost() в RunTestCase()
@NuriEngin не нужно передавать null. Пожалуйста, проверьте мой обновленный ответ. Последний случай не выполняется, потому что он ищет функцию DynamicHost(), в противном случае он также будет работать, если DynamicHost() присутствует в коде.
@VicJordan Что, если я хочу использовать папку и хост по умолчанию? Затем нужно написать: TestCase('NameParam', null, null, 'FooParam')
Уважаемый @VicJordan, как я уже сказал, ваше предложение работает нормально, но ответ, который я принял, мне больше подходит из-за параметра foo. Спасибо за помощь.
Похоже, что параметр foo является особенным. Я бы использовал его, но вам нужно изменить порядок параметров:
function RunTestCases (name, folder, host,foo)
{
host = host || (foo? 'FooHostParam' : DynamicHost()) ;
folder = folder || foo? 'FooFolderPath' : 'BarFolderPath')
const url = (foo? (folder + foo + '/' + name +'.T.js') : (folder + name +'.T.js'));
return {
title: name,
hostPageUrl: host,
url
};
}
в вопросе есть такой вызов функции: RunTestCases('NameParam', 'FooParam') С вашим кодом будет так: RunTestCases('NameParam', null, null, 'FooParam') но второй вариант подойдет: RunTestCases ('NameParam', 'BarFolderPath', 'BarHostParam')
Как я уже сказал, «вам нужно изменить порядок параметров», OP необходимо внести изменения, чтобы эта работа работала. То же самое касается любого другого возможного ответа. @ ИльяЗеленько
function RunTest (name, folder, host, foo) {
host = host || (foo ? DynamicHost() : 'FooHostParam');
folder = folder || 'FooFolderPath';
returnVal = {
title: name,
hostPageUrl: host,
};
returnVal.url = foo ? folder + name +'.T.js' : folder + foo + '/'+ name +'.T.js';
return returnVal;
}
Вероятно, вы могли бы увеличить папку перед назначением URL-адреса, чтобы вам не нужно было иметь эту логику в наборе. Это должно избавить вас от дублирования строки расширения.
Вы можете изменить значение папок перед назначением, например if (!foo) folder = folder + foo + '/';, тогда просто установите URL-адрес, например. returnVal.url = folder + name +'.T.js';
разве ваше тернарное условие не смешано?
Я просто редактирую свой пост: я забыл указать
DynamicHost()вRunTestCase(), поэтому мне пришлось изменить ваше использование;host = host || DynamicHost();и хорошо сработало!.