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

Sal*_*man 5 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");
    });
};
Run Code Online (Sandbox Code Playgroud)

我不知道为什么先得到ALERT1然后我得到ALERT2.我得到ALERT2后想运行其他代码.

任何建议将不胜感激.

Tha*_*you 5

如果telephone.get是异步,则需要等待它完成才能进行第一次警报

document.addEventListener("deviceready", onDeviceReady, false);
Run Code Online (Sandbox Code Playgroud)

编写您的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."));
  });
}
Run Code Online (Sandbox Code Playgroud)

目前使用的功能,通过该功能可以接受两个参数的回调errresult.在回调中,检查错误.如果存在,请相应处理.您可以使用访问错误的消息err.message.

function onDeviceReady() {
  devicePhoneNumber(function(err, result) {
    if (err) return alert(err.message);
    alert("Alert 1");   // alert 1
    alert(result);      // alert 2
  });
}
Run Code Online (Sandbox Code Playgroud)