如何使Cordova同步

4
我的问题非常简单,但我在网上找不到任何答案。我正在完成一款手机应用程序的开发,由于Cordova的非同步执行,我遇到了一些问题。目前,我必须像这样操作:
var finishedFl = 0;
cordova.exec(
function(info) {
    .... [Function goes here]
    finishedFl = 1;
}, 
function (info) {
    alert('Error');
},
'Smapps', 'getInfo', []);

While(finishedFl != 1){
    wait;
}

anotherFunction();

我发现这种编程方式极为令人困扰,显然并不好。那么问题来了:有没有办法使Cordova的执行同步呢?


1
同步在面向对象的客户端-服务器应用程序中是一个不好的想法。你试图通过同步实现什么? - Jonathan M
因为在执行cordova.exec()之后,我需要连接到一个Web服务。异步执行使得WS变量的值为空。最终导致应用程序失败。 - pablo10ksk
只需为Cordova使用回调函数。 - Jonathan M
1个回答

2
exec方法通过MessageQueue向操作系统发送消息并执行一个动作,通常在不同的线程上执行(它不在UI线程上运行)。当本地调用完成后,将向JS层发送消息并调用successCallback。如果出现错误,则发送另一条消息并触发errorCallback。如果您是插件的创建者,可以调用runOnUIThread(new Runnable(){...})方法(至少在Android中)在UI线程上执行某些操作,但不建议这样做,因为会阻塞UI。
如果您不喜欢回调导致的“回调地狱”想法。您可以将回调包装在promises中。所以你可以像这样做cordova.wrappedExec().then(successCallback).then(doSomethingElse); 请参见https://github.com/stackp/promisejs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接