У меня есть функция, которая при вызове возвращает результат функции обещания.
У меня есть метод executeScript, который динамически обрабатывает методы Javascript и возвращает обещание о том, что возвращают эти методы.
Базовый скелет
Ref.executeScript({
code: "getData(); function getData(){ var res = 'Hello'; return res;}",
function(results){
console.log(results); ////THIS RETURNS "Hello"
});
Когда код напрямую возвращает переменную, он работает. Например, следующее при выполнении возвращает Hello.
getData();
function getData(){
var res = "Hello";
return res;
}
Но если я верну его в событии щелчка, он вернет предыдущее значение «Hello», а не «Hello2» при нажатии кнопки. Я хочу вернуть "Hello2".
getData();
function getData(){
var res = "Hello";
jQuery("#myButton").on('click', function(){
res = "Hello2";
alert(res); //this gets called
});
return res;
}
Обновлен исходный вопрос для большей ясности
getData()
дождаться отправки.on()
перед возвратом значения? Но если я верну его внутри события щелчка, он вернет предыдущее значение Hello, а не Hello2 при нажатии кнопки. Я хочу, чтобы возвращалось Hello2. Никакое значение неreturn
ed из обработчикаclick
. - person guest271314   schedule 06.02.2019jQuery.Deferred
для возврата объекта обещания jQuery или использовать встроенный конструкторnew Promise()
для разрешения значения после отправки событияclick
, а затем связать.then()
с функцией, переданной в качестве параметра, где аргументом является выполненное обещание jQuery или значениеPromise
. - person guest271314   schedule 06.02.2019jQuery('#myButton').on(...)
, - это устанавливает прослушиватель событий щелчка на вашем#myButton
элементе. Вы должны заставить этого слушателя выполнять необходимые инструкции, поскольку они будут происходить только тогда, когда вы щелкнете на элементе - person Phil   schedule 06.02.2019getData()
завершит выполнение. - person Phil   schedule 06.02.2019.executeScript()
используется в расширении Chromium / Chrome? - person guest271314   schedule 06.02.2019res
, которое является локальным, когда вы регистрируете его для события.res
в анонимной функции иgetData()
разные, поэтому вы не получаете желаемого результата. Глобальные переменные решат проблему, но они не являются хорошей практикой программирования. - person capnam   schedule 06.02.2019details
Если внедренный сценарий имеет тип кода, обратный вызов выполняется с одним параметром, который является возвращаемым значением сценария, заключенным в массив .. Хотя это answer утверждает, что.executeScript()
- этоPromise
, где.then()
можно связать. - person guest271314   schedule 06.02.2019function getData() { return new Promise(function(resolve) { jQuery("#myButton").on('click', function() { resolve("Hello2") }) }) }
- person guest271314   schedule 06.02.2019.executeScript()
? - person guest271314   schedule 06.02.2019