我使用Apache Cordova开发移动应用程序。问题是我想获得手机号码,然后通过jQuery get函数发送它进行授权。所有功能都可以,但获取手机号码的功能比其他功能慢,最后完成。
我的代码摘要是:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
devicePhoneNumber();
alert("ALERT1"); // ALERT1
};
function devicePhoneNumber() {
var telephoneNumber = cordova.require("telephonenumber");
telephoneNumber.get(function (result) {
alert(result); //ALERT2
}, function () {
alert("error");
});
};
我不知道为什么先得到ALERT1然后我得到ALERT2。 我得到ALERT2后想运行其他代码。
任何建议都将不胜感激。
答案 0 :(得分:5)
如果telephone.get
是异步的,您需要等待它完成才能发出第一个警报
document.addEventListener("deviceready", onDeviceReady, false);
编写devicePhoneNumber
函数以接受回调done
。回调会收到两个参数err
(如果存在)和result
。无论telephoneNumber.get
如何,仍将调用回调
function devicePhoneNumber(done) {
var telephoneNumber = cordova.require("telephonenumber");
telephoneNumber.get(function (result) {
done(null, result);
}, function () {
done(Error("There was an error getting the phone number."));
});
}
要立即使用此功能,请将函数传递给接受两个参数err
和result
的回调。在回调中,检查错误。如果存在,请相应处理。您可以使用err.message
访问错误消息。
function onDeviceReady() {
devicePhoneNumber(function(err, result) {
if (err) return alert(err.message);
alert("Alert 1"); // alert 1
alert(result); // alert 2
});
}
答案 1 :(得分:1)
在callback
功能中添加devicePhoneNumber()
功能:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
devicePhoneNumber(function(){ //anonymous function for the callback parameter
/* everything you put in here will be executed only AFTER
telephoneNumber.get() has run successfully */
alert("ALERT1"); // ALERT1
});
};
function devicePhoneNumber(callback) {
var telephoneNumber = cordova.require("telephonenumber");
telephoneNumber.get(function (result) {
alert(result); //ALERT2
callback(); //callback function is called here
}, function () {
alert("error");
});
};