繁体   English   中英

如何等待 function 完成在 angularJS 中的执行?

[英]How to wait for a function to finish it's execution in angularJS?

我有一个名为validityCheck()的function,如果用户有效则返回valid ,如果用户invalid则返回无效。 我需要从其他地方调用这个 function 并在if-else条件下使用结果。

这是 function 定义(这个 function 是在普通的javascript库名称library.js中定义的):

function validityCheck(userid, serviceid, system) {
    $(document).ready(function () {
        $.get("https:*******userValidation?serviceid=" + serviceid + "&userid=" + userid + "&system=" + system, function (data, status) {
            console.log(data);
            return data[0];
        });

    });
}

现在我想这样做(此代码部分在我项目的controller ):

var validity = validityCheck($scope.userid, serviceid, 'abc');
if(validity=="VALID"){
    //do something
}else{
    //do something
}

我需要等到我得到数据。 我想我需要使用 callback_ 或类似的东西,但我不知道该怎么做。

为什么不返回 angularjs $http的 promise then在你的代码中这样使用呢?

function validityCheck(userid, serviceid, system) {
    let params = {
        userid: userid,
        serviceid: serviceid,
        system: system
    };
    let request = {
        url: "https:*******userValidation",
        method: "GET",
        headers: {"Content-Type": "application/x-www-form-urlencoded"},
        params: params
    };

    return $http(request).then((response) => {
        return response.data[0] ? response.data[0] : '';
    });
}

用法:

validityCheck($scope.userid, serviceid, 'abc').then((validity) => {
    if (validity === "VALID") {
        //do something
    } else {
        //do something
    }
});

PS别忘了注入angularjs $http

更新:在 angular 中注册 library.js

(function () {
    "use strict";

    angular
        .module("yourAngularModuleName")
        .factory("LibraryFactory", LibraryFactory);

        function LibraryFactory($http) {
            // Add your functions here...
        }

})();

更新:使用现有代码的普通 JavaScript

function validityCheck(userid, serviceid, system) {
    return new Promise((resolve, reject) => {
        $.get("https:*******userValidation?serviceid=" + serviceid + "&userid=" + userid + "&system=" + system, function (data, status) {
            console.log(data);
            resolve(data[0]);
        });
    });
}

在我提供的 USAGE 中使用相同的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM