如何使javascript函数在另一个完成后运行?

时间:2014-09-12 06:50:47

标签: javascript jquery cordova

我使用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后想运行其他代码。

任何建议都将不胜感激。

2 个答案:

答案 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."));
  });
}

要立即使用此功能,请将函数传递给接受两个参数errresult的回调。在回调中,检查错误。如果存在,请相应处理。您可以使用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");
    });
};