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

How to make a javascript function to run after another one get finished?

本文关键字:函数 另一个 运行 javascript 一个      更新时间:2023-09-26

我正在使用Apache Cordova开发移动应用程序。问题是,我想获取手机号码,然后通过jQuery获取功能进行授权。所有功能都还可以,但获取手机号码的功能比其他功能慢,最后完成。

我的代码摘要如下:

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