gpt4 book ai didi

javascript - Angular 发出伪同步 HTTP 请求

转载 作者:行者123 更新时间:2023-11-27 23:27:27 26 4
gpt4 key购买 nike

我想构建一种通过 POST 请求访问数据库的机制。到目前为止,我确实收到了所需的数据,但我对时间有疑问。这是我正在使用的三段代码(经过简化以保持问题的焦点)。

首先,一个工厂处理 Servlet 的 HTTP 请求:

var My_Web = angular.module('My_Web'); 

My_Web.factory('DB_Services', function($http , $q) {
var l_Result ;
var DB_Services = function(p_Query) {
var deferred = $q.defer();
var url = "http://localhost:8080/demo/servlets/servlet/Test_ui?";
var params = "data=" + p_Query ;
var Sending = url + params ;

$http.post(Sending).
success(function(data, status, headers, config) {
deferred.resolve(data);
}).
error(function(data, status, headers, config) {
deferred.reject(status);
});
return deferred.promise;

}

return DB_Services;
});

其次,处理向所有需要从远程数据库提取数据的 Controller 公开的 promise (或者我的意思是这样)的通用函数:

$rootScope.Get_Data_from_DB = function(p_Query) {
DB_Services(p_Query).then(function(d) {
console.log("In Get_Data_from_DB; Received data is: " + JSON.stringify(d));
$scope.data = d;
});
};

第三,其中一个 Controller 中的一个示例:

$scope.Search_Lookups = function () {

console.log ("search for lookup data...") ;

var l_Lookup_Type = document.getElementById("THISONE").value ;

var l_Send_Request_Data = '{"Requestor_ID":"4321" , "Request_Details" : { "Data_type" : "' + l_Lookup_Type + '" } }' ;

console.log("Sending Request: " + l_Send_Request_Data) ;

l_Data = $rootScope.Get_Data_from_DB(p_Query) ;

console.log ("Received response: " + l_Data) ;

Deploy_data(l_Data) ;

}

函数Deploy_data(l_Data)负责分解接收到的数据并将相关片段放在屏幕上。

发生的情况是,我在控制台上收到字符串 Received response: undefined ,并在检索结果之后立即收到 In Get_Data_from_DB;收到的数据是:(这里我获取到的数据).

收到的响应:未定义是从调用函数(第三段代码)打印出来的,而带有实际数据的输出是从上面的第二段代码中接收和打印的。这意味着对 Deploy_data 的调用将不会收到提取的数据。

同样的机制(即工厂$rootScope.Get_Data_from_DB)将被许多 Controller 广泛使用。

我想过使用 $scope.$watch 但我不确定,因为同一用户可能会同时触发多个查询(例如,请求可能需要几秒钟才能到达的报告)同时,要求一些其他的东西)。

最佳答案

我想我找到了一个解决方案(至少暂时看起来没问题)。全局函数 Get_Data_from_DB 接受第二个参数,该参数是调用 Controller 的回调。

调用 Controller 创建 Get_Data_from_DB 函数的私有(private)实例,并触发提供回调函数的请求。

我需要使用并行查询来测试它,但这还有很长的路要走......

关于javascript - Angular 发出伪同步 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34854027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com