@bdadabum said in Как запретить записывание текста в буферобмена пользователя?:
Как запретить записывать текст в буфер обмена пользователя?
Ни как. BAS использует глобальный (системный) буфер обмена
Привет. Мне нужно реализовать вызов функций через API чтобы их принцип работы был похож как в модуле BAS "Вызов асинхронной функции". Чтобы допустим у меня есть 10 строк для создания аккаунтов (см.скриншот). Нужно чтобы при нажатии на кнопку "Создать" я мог огранить количество одновременно работающих потоков. Может есть уже кого идеи?


@hustler35 said in Как реализовать вызов функций в кастомном интерфейсе:
Привет. Мне нужно реализовать вызов функций через API чтобы их принцип работы был похож как в модуле BAS "Вызов асинхронной функции". Чтобы допустим у меня есть 10 строк для создания аккаунтов (см.скриншот). Нужно чтобы при нажатии на кнопку "Создать" я мог огранить количество одновременно работающих потоков. Может есть уже кого идеи?
Ознакомьтесь с мануалом https://wiki.bablosoft.com/web-interface/#/callbasfunction

и при использовании await не обязательно использовать then

https://tproger.ru/translations/understanding-async-await-in-javascript/
@Fox спасибо, немного помогли твои светы, но пока только получается сделать чтобы они все разом открывались и возвращали результат, я не заню как ограничить кол-во одновременно работающиех потоков.
Моего опыта в программировании не хватает такое реализовать. Подскажи пожалуйста, как сделать такое. Я думаю многим кто сталкнется с этим, было бы интересно знать

$(document).ready(function () {
var app = new Vue({
el: '#app',
vuetify: new Vuetify(),
data: {
value: `Татьяна,Орлова,ж
Галина,Замятина,ж
Максим,Федотов,ж
Сергей,Ковальчук,м
Вера,Алферова,ж
Салават,Нурмухаметов,м
Лариса,Малахова,ж
Екатерина,Худякова,ж
Евгения,Отт,ж
Аида,Хаирова,ж
Ахтар,Баймурзин,м
Гульнара,Иванова,ж`
},
methods: {
async restartScript() {
Api.Restart()
},
async getValueTextArea() {
let regEx = /[^\r\n]+/g;
let nameList = this.value.match(regEx)
for (i = 0; i < nameList.length; i++) {
Api.RunFunction('test', { user: nameList[i] })
}
var RunningTasks = Api.GetTasks()
console.log(RunningTasks)
Object.values(RunningTasks).forEach(function (Task) {
console.log(Task)
Task.object.then((data) => console.log('return', data));
})
}
}
})
/////Api event handler
Api.SetEventHandler(function (EventType, EventData) {
/////Script started
if (EventType == "start") {
}
/////Script stopped
if (EventType == "stop") {
}
/////More events: https://wiki.bablosoft.com/web-interface/#/managingscriptlifetime
})
/////Automatically start script https://wiki.bablosoft.com/web-interface/#/managingscriptlifetime?id=method-acceptresources
Api.AcceptResources(true)
/////After everything is initialized may show body
$("body").fadeIn()
/////Events
});
/////Resource values are obtained through this function when hitting run button, you can change it.
/////For example, you can edit value entered by user, make custom validation, or replace resource system compleatelly
/////More info: https://wiki.bablosoft.com/web-interface/#/managingscriptlifetime?id=method-acceptresources
function GetResourceValue(ResourceName) {
return ""
}
//Interface editor has no connection to BAS and therefore can't execute BAS functions.
//If you try to call function from interface editor,
//you will get a random string as result in a several seconds.
//This behavior is not acceptable in several cases: if your function return a list,
//not a string, or string in specific format, if you want to test error handling, etc.
//In order to circumvent this limitation. you need to define "EmulateFunctionRun"
//function inside web interface.
//More info: https://wiki.bablosoft.com/web-interface/#/callbasfunction?id=debugging-bas-function-call
function EmulateFunctionRun(FunctionName, FunctionParameters, Resolve, Reject) {
//Generate random data
var RandomTime = Math.floor(Math.random() * (5000 - 3000)) + 3000
var RandomResult = Math.floor(Math.random() * (1000))
//Return result in RandomTime milliseconds
setTimeout(function () {
//Generate result string
Resolve("Test result " + RandomResult)
}, RandomTime)
}
@hustler35 said in Как реализовать вызов функций в кастомном интерфейсе:
@Fox спасибо, немного помогли твои светы, но пока только получается сделать чтобы они все разом открывались и возвращали результат, я не заню как ограничить кол-во одновременно работающиех потоков.
Эмм, ну тут вроде же всё очевидно? После метода Api.GetTasks() вы получаете массив, считаете количество элементов в массиве и запускаете нужное количество оставшихся потоков.
Моего опыта в программировании не хватает такое реализовать.
Это ваш первый опыт работы с vue? Хранить данные value проще всего в массиве, ну или объекте, что бы проще было потом с этими строками работать.
Асинхронными нужно создавать функции, только если используешь в них await или then, то есть если необходима работа с промисами. У вас в обоих методах нет ни одного
Я думаю многим кто сталкнется с этим, было бы интересно знать
Мой вам совет - не используйте ни когда это выражение, подобное обобщение вызывает только негативный эффект
@Fox Спасибо, попробую так сделать. Да, vue только изучаю. А про выражение которое написал, про то что многим будет интересно, я согласен с вами. Не знаю почему написал, чтобы наверное помощь получить:)
Просто застрял на этой реализции асинхронного вызова, 3 дня голову ломаю. Пробовал сначала просто вызвать функцию и передать ей в параметре весь массив и уже в интерфейсе BASa с помощью модуля "Вызов асиннхронной функции" сделать все.
Но почему то не получалось. Этот модуль возращал результаты функци исходя из параметра "сколько одноврменно потоков должно работать. Если я ставил 5 потоков одновремено и запускал асинхронную функцию 10 раз, то только у 5 приходил результат. а остальные 5 вызвращали null. Хотя когда работал со стандартным интерфейсом BASa все работало как надо.
@hustler35 said in Как реализовать вызов функций в кастомном интерфейсе:
@Fox Спасибо, попробую так сделать. Да, vue только изучаю. А про выражение которое написал, про то что многим будет интересно, я согласен с вами. Не знаю почему написал, чтобы наверное помощь получить:)
Просто застрял на этой реализции асинхронного вызова, 3 дня голову ломаю. Пробовал сначала просто вызвать функцию и передать ей в параметре весь массив и уже в интерфейсе BASa с помощью модуля "Вызов асиннхронной функции" сделать все.
Но почему то не получалось. Этот модуль возращал результаты функци исходя из параметра "сколько одноврменно потоков должно работать. Если я ставил 5 потоков одновремено и запускал асинхронную функцию 10 раз, то только у 5 приходил результат. а остальные 5 вызвращали null. Хотя когда работал со стандартным интерфейсом BASa все работало как надо.
Я хоть убей не понимаю в чём именно затык, я же описал логику. Определяем количество запущенных функций:
Object.keys(Api.GetTasks()).length
берём нужное нам число одновременно работающих функций 10 и вычитаем
var count = Object.keys(Api.GetTasks()).length
var permittedNumber = 10 - count
далее используем полученное число в цикле запуска новых функций
for(var i = 0; i < permittedNumber; i++){
Api.RunFunction("LoadUrl", {Url: "ip.bablosoft.com"})
}
Просто застрял на этой реализции асинхронного вызова, 3 дня голову ломаю.
Кстати интересно почему именно 3? Почему то подавляющее количество пользователей, которые описывают проблему пишут, что мучались с ней 3 дня. Или это как притча какая то - ... и мучался мОлодец с задачей три дня и три ночи, и на третий день пошёл на форум слово молвить...
@Fox said in Как реализовать вызов функций в кастомном интерфейсе:
Кстати интересно почему именно 3?
1 день. Запланировать.
2 день. Попробовать выполнить запланированное.
3 день. Попытаться понять почему не работает.
4 день. Пишем что бас не работает.
@hustler35 Можно просто отслеживать событие завершения потока thread_end и запускать новый