gpt4 book ai didi

javascript - 如何将 angularjs $q.all() 与异步创建的 Promise 数组一起使用

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

我正在尝试使用 $q.all() 来等待一堆 promise 得到解决。为此,我创建了一个 Promise 数组并将其传递给 all() 方法,但这似乎不起作用。Promise 数组填充了 $resource 对象返回的 Promise,这些对象是在每次迭代中创建的,我认为这就是问题所在,因为 Promise 数组是异步填充的。

我得出这个结论是因为 $q.all() 方法返回的 promise ( promise 数组)始终是一个空数组。就像 $q.all() 方法不会等待数组被填满。但我不确定这是否是问题所在。

我将非常感谢在这件事上的任何帮助,如果无法通过 $ q.all() 实现我想要的目标,我希望在解决所有 promise 后看到其他执行代码的方法。

这是我当前使用的代码

        var promisesArray = [];            
var images, postObject;
files.readFile('images.txt')
.then(function (data) {
images= angular.fromJson(data);
images.forEach(function (image, idx) {
var deferred = $q.defer();
if (!image.sent) {
files.readFile(image.name)
.then(function (data) {
postObject = angular.fromJson(data);
$resource(EndPointsService.baseURL + "images").save(postObject, function(data) {
deferred.resolve(data);
if (data.status) {
image.sent= true;
}
},function(error){
console.log(error);
});
promisesArray.push(deferred.promise);
},function(error){
console.log(error);
});
}
});


$q.all(promisesArray).then(function (data) {
console.log(data);
files.writeFile("images.txt", images)
.then(function (data) {
console.log(data);
}, function (error) {
console.log(error);
});
});
},function(error){
console.log(error)
});

最佳答案

Promise 的 .then 方法根据返回的数据返回一个新的 Promise。

.then方法内部创建promise数组和return $q.all.then 方法的 promise :

̶v̶a̶r̶ ̶p̶r̶o̶m̶i̶s̶e̶s̶A̶r̶r̶a̶y̶ ̶=̶ ̶[̶]̶;̶            
var images, postObject;
var arrayPromise = files.readFile('images.txt')
.then(function (data) {
͟v͟a͟r͟ ͟p͟r͟o͟m͟i͟s͟e͟s͟A͟r͟r͟a͟y͟ ͟=͟ ͟[͟]͟;͟
images= angular.fromJson(data);
images.forEach(function (image, idx) {
̶v̶a̶r̶ ̶d̶e̶f̶e̶r̶r̶e̶d̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶
if (!image.sent) {
var promise = files.readFile(image.name)
.then(function (data) {
postObject = angular.fromJson(data);
var url = EndPointsService.baseURL + "images"
͟r͟e͟t͟u͟r͟n͟ $resource(url).save(postObject).$promise;
});
promisesArray.push(promise);
};
});
͟r͟e͟t͟u͟r͟n͟ $q.all(promisesArray);
});


arrayPromise.then(function (dataArray) {
console.log(dataArray);
//Process data here
});

关于javascript - 如何将 angularjs $q.all() 与异步创建的 Promise 数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260371/

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