繁体   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