gpt4 book ai didi

javascript - Angularjs $http 使用 $q.defer 返回未完成的结果

转载 作者:行者123 更新时间:2023-11-28 00:46:36 25 4
gpt4 key购买 nike

我有一个 Angular 问题,即使我正在使用 $q.defer 功能,结果也会在实际完成之前返回到我的 Controller 。我的服务中有以下功能

      getFileInfo : function (fulfillmentId)
{
var pdfResults = [];
var jpgResults = [];
var orderDetails = {};
var deferred = $q.defer();


$http.get(appConstants.api_url + '/references/' + fulfillmentId + '/files?max=2000')
. then (function (fileResults)
{
angular.forEach(fileResults.data.entities,function(value)
{
if(value.file.extension == 'pdf')
{
pdfResults.push({files : value});

}

if(value.file.extension == 'jpg')
{
jpgResults.push({files : value});
}
});

orderDetails.jpgResults = jpgResults;

return pdfResults;

})
.then (function (pdfResults)
{
angular.forEach(pdfResults,function(value,key)
{

var fileUuid = value.files.file.file_uuid;

return $http.get(appConstants.api_url + '/resources/' + fileUuid + '/tags')
.then (function (preflightResults)
{

var deserializeJson = [];
deserializeJson.push(angular.fromJson(preflightResults.data.entities[0].resource_json));
var formatedPreflightResults = localAPI.addUIMessages(deserializeJson);

pdfResults[key].preflightResults = formatedPreflightResults;
});

});

orderDetails.pdfResults = pdfResults;

deferred.resolve(orderDetails);
});


return deferred.promise;


}

我从我的 Controller 调用它,如下所示:

 conformAPI.getFileInfo($scope.fulfillmentId)
.then (function (results)
{
console.log(results);
console.log(results.pdfResults[0]);
console.log(results.pdfResults[0].preflightResults)

});

我遇到的问题是我所做的最后一个控制台日志显示为未定义。其他一切都返回良好的结果。第一个和第二个控制台类似有 preflightResults 对象,但看起来它添加得有点晚了。我认为通过使用 $q.defer 在一切完成之前不会返回任何内容。关于如何解决这个问题有什么想法吗?

最佳答案

看来您没有等待“getFile”获取请求的结果。我稍微重构了你的代码。它可能不起作用,因为我无法运行它,但你应该明白我的观点。

getFileInfo: function (fulfillmentId) {

var pdfResults = [];
var jpgResults = [];
var orderDetails = {};
var deferred = $q.defer();

function getByFileId(fileUuid, preflightResults) {

return $http.get(appConstants.api_url + '/resources/' + fileUuid + '/tags')
.then(function (preflightResults) {
var deserializeJson = [];
deserializeJson.push(angular.fromJson(preflightResults.data.entities[0].resource_json));
var formatedPreflightResults = localAPI.addUIMessages(deserializeJson);

return formatedPreflightResults;
});
}

function getFiles(pdfResults) {

var subDefer = $q.defer();
var current = 0;

angular.forEach(pdfResults, function (value, key) {
current += 1;
var fileUuid = value.files.file.file_uuid;

getByFileUuid(fileUuid, preflightResults)
.then(function (results) {

pdfResults[key].preflightResults = results;

// need to know when done with all
if (pdfResults.length === current) {
subDefer.resolve(pdfResults);
}
});
});

return subDefer.promise;
}

$http.get(appConstants.api_url + '/references/' + fulfillmentId + '/files?max=2000')
.then(function (fileResults) {

angular.forEach(fileResults.data.entities, function (value) {

if (value.file.extension == 'pdf') {
pdfResults.push({ files: value });
}

if (value.file.extension == 'jpg') {
jpgResults.push({ files: value });
}
});

orderDetails.jpgResults = jpgResults;
return pdfResults;

}).then(getFiles).then(function(pdfResults) {

orderDetails.pdfResults = pdfResults;
deferred.resolve(orderDetails);
});

return deferred.promise;

}

关于javascript - Angularjs $http 使用 $q.defer 返回未完成的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305311/

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