簡體   English   中英

如何使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."));
  });
}

要立即使用該函數,請向函數傳遞一個回調,該回調接受兩個參數errresult 在回調中,檢查錯誤。 如果存在,請相應處理。 您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM