![](/img/trans.png)
[英]How to execute a function only after another one is finished on browser Javascript?
[英]How to make a javascript function to run after another one get finished?
我正在使用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后想运行其他代码。
任何建议将不胜感激。
如果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
});
}
在devicePhoneNumber()
函数中添加一个callback
函数:
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");
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.