首先,这是一个非常具体的例子,它将错误的方式用于将异步调用改造成一个非常同步的代码库,该代码库有数千行,而且时间目前还没有能力对"执行"进行更改对的." 它伤害了我生命中的每一根纤维,但现实和理想往往不会啮合.我知道这很糟糕.
好的,那个方法,我怎么做到这样我可以:
function doSomething() {
var data;
function callBack(d) {
data = d;
}
myAsynchronousCall(param1, callBack);
// block here and return data when the callback is finished
return data;
}
Run Code Online (Sandbox Code Playgroud)
示例(或缺少)都使用库和/或编译器,这两者对于该解决方案都不可行.我需要一个如何使其阻塞的具体示例(例如,在调用回调之前不要离开doSomething函数)不要冻结UI.如果在JS中可以做到这样的话.
所以,每个人都知道我们使一个类扩展CordovaPlugin并覆盖它 execute(),然后在JS和本机Java(用于Android)之间创建一个桥梁.我们进一步使用PluginResult将结果返回给JS.
因此,当JS向Java插件发出请求时,所有这些都会发生.我的问题是,如何异步地将结果发送回JS(以及HTML)?
我不知道异步这个词是不是就在这里.问题是我想把一些东西送回JS(比如,当wifi变为启用/禁用时).
我已经研究过这个,但没有任何适合我的情况.
我试过的是 -
WiFi监听WifiManager事件Toast.
WiFi时间CallbackContext,并使用callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, "Wifi
Connected"))Toast和发送结果 与不同的消息断开连接.MyPlugin.java
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
...
public class MyPlugin extends CordovaPlugin {
private WifiReceiver wifiBroadcastReceiver = null;
private CallbackContext callbackContext = null;
...
public MyPlugin() {
wifiBroadcastReceiver = new WifiReceiver();
...
}
...
public boolean execute(String action, …Run Code Online (Sandbox Code Playgroud)