提问人:Araf 提问时间:6/23/2020 最后编辑:Araf 更新时间:6/23/2020 访问量:1057
如何等待函数在angularJS中完成执行?
How to wait for a function to finish it's execution in angularJS?
问:
我有一个名为函数,如果用户有效,如果用户无效,它会返回。我需要从其他地方调用此函数并在条件中使用结果。validityCheck()
valid
invalid
if-else
下面是函数定义(此函数以普通库名称定义):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_或类似的东西,但我不知道该怎么做。
答:
1赞
Jay Lord Ibe
6/23/2020
#1
为什么不返回 angularjs 的 promise 并像这样在您的代码中使用呢?$http
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
}
});
P.S. 别忘了注入angularjs $http
更新:在角度中注册库.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 中使用相同的代码。
评论
0赞
Araf
6/23/2020
该函数在文件中定义。而且我实际上不知道如何在请求中使用。validityCheck($scope.userid, serviceid, 'abc')
javascript
promise
javascript
http
0赞
Jay Lord Ibe
6/23/2020
由于我可以在您的代码中看到您正在使用 $scope,因此我可以说您已经在 angular 模块中注册了库.js。你能给我看看库.js的内容吗?
0赞
Araf
6/23/2020
这是场景,尽管我已经在问题中描述过:我有定义函数的普通库名称。现在,我已经包含在我的项目中,我必须从我的项目中调用此函数并使用返回的结果。定义了两个函数,一个是,另一个是重定向到基本 URL。javascript
library.js
validityCheck(userid, serviceid, system)
library.js
angularJS
validityCheck(userid, serviceid, system)
library.js
validityCheck($scope.userid, serviceid, 'abc')
redTobaseURL()
0赞
Jay Lord Ibe
6/23/2020
你是如何将库.js包含到你的角度项目中的?您是否在 angular 模块中将其注册为控制器、服务或工厂?
1赞
Jay Lord Ibe
6/23/2020
@Araf我建议您将 library.js 注册到您的 angular 应用程序,以便您可以在库中使用其功能.js。我已经更新了上面的答案,以显示如何注册您的 javascript。
评论
validityCheck()
javascript
library.js
javascript
validityCheck()