2014-06-05 71 views
3

我的问题很简单,但我无法在网上找到任何东西。我正在完成手机应用程序的开发,并且由于不同步执行,我遇到了科尔多瓦的一些问题。因为它是现在,我必须做这样的事情:如何使科尔多瓦同步

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

同步在OOP客户端 - 服务器应用程序中是一个坏主意。你想通过同步实现什么? –

+0

因为在执行cordova.exec()之后我需要连接一个WebService。异步执行使得WS的变量值为空。最后,导致应用程序失败 – pablo10ksk

+0

只使用cordova的回调。 –

回答

2

exec方法通过MesageQueue向OS发送消息,并通常在不同的线程中执行和操作(它不会在UI线程上运行)。当本地调用完成时,消息发送给JS层,并调用successCallaback。如果发生错误,则会发送另一条消息并发出errorCallaback。如果您是该插件的创建者,则可以调用runOnUIThread(new Runnable(){....})方法(至少在Android中)在UI线程上执行某些操作,但不建议这样做,因为阻止了UI 。

如果你不喜欢回调导致“回调地狱”的想法。您可以将回调包装在承诺中。所以你可以这样做: cordova.wrappedExec()。then(successCallback).then(doSomethingElse); 看看这里https://github.com/stackp/promisejs