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