![](/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.