我的问题很简单,但我无法在网上找到任何东西。我正在完成手机应用程序的开发,由于非同步执行,我在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执行同步?
答案 0 :(得分:2)
exec方法通过MesageQueue向OS发送消息,并且通常在不同的线程中执行和操作(它不在UI线程上运行)。当本机调用完成时,将消息发送到JS层并调用successCallaback。如果出现错误,则会发送另一条消息并触发errorCallaback。如果你是插件的创建者,你可以调用runOnUIThread(新的Runnable(){....})方法(至少在Android中)来在UI线程上执行某些操作,但是不建议这样做,因为阻止了UI 。
如果你不喜欢回调导致“回调地狱”的想法。您可以将回调包装在promises中。所以你可以这样做 。cordova.wrappedExec(),然后(successCallback)。然后(doSomethingElse); 看看https://github.com/stackp/promisejs