【发布时间】:2019-02-06 05:45:04
【问题描述】:
我有一个函数,它在调用时将输出返回到一个 promise 函数。
我有一个 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;
}
更新了原始问题以提供更清晰的说明
【问题讨论】:
-
您对
jQuery('#myButton').on(...)所做的所有功能就是在您的#myButton元素上建立一个点击事件监听器。您应该让该侦听器执行所需的语句,因为它们只会在您单击元素时发生 -
您实际上不太可能“需要”。你应该解释什么时候会发生什么,记住任何点击事件都将在
getData()完成执行后很长时间被触发。 -
.executeScript()是否用于 Chromium/Chrome 扩展程序? -
@SouravDas documentation 似乎没有提到为
details处理异步进程 “如果注入的脚本是代码类型,则回调使用单个参数执行,即脚本的返回值,包装在一个数组中。” 虽然 answer 声明.executeScript()是一个Promise,其中.then()可以被链接。 -
@SouravDas 没试过 Cordova InAppBrowser,未经测试
function getData() { return new Promise(function(resolve) { jQuery("#myButton").on('click', function() { resolve("Hello2") }) }) }
标签: javascript jquery cordova anonymous-function inappbrowser