gpt4 book ai didi

jquery - 如何将 Promise 对象数组转换为数组的 Promise 对象?

转载 作者:行者123 更新时间:2023-12-01 06:17:00 24 4
gpt4 key购买 nike

有没有办法将 Promise 对象数组转换为数组的 Promise 对象?我正在寻找类似 $q.all(promises) 的东西在 AngularJS 中。

这是我的代码:

var getPages = function(courses) {
var courses_promises = courses.filter(function(item) {
return item.courses[0].home_link;
}).map(function(item) {
deferred = $.Deferred();
item["class_link"] = item.courses[0].home_link;
item["home_link"] = item["class_link"] + "class/index";
$.get(item.home_link)
.then(function(response) {
item["html"] = response;
deferred.resolve(item);
});
return deferred.promise();
});
return $.when.apply($, courses_promises);
};

我希望 getPages 函数返回一个将使用值数组解析的单个 Promise,每个值对应于 Promise 数组中同一索引处的 Promise。如果任何一个 Promise 被拒绝解决,那么由此产生的 Promise 也将被同样的拒绝解决。

然后我会使用

getPages.then(getEvents)

其中 getEvents 是另一个函数,它需要一个包含由 getPages 解析的元素的数组。

谁能帮帮我吗?谢谢!

最佳答案

对于那些不想引入另一个库的人(尽管我可以确认 Q 很棒,似乎是节点的最佳 promise 系统),这里是使用 jQuery 的 Q.allwhen 的实现:

function all(arrayOfPromises) {
return jQuery.when.apply(jQuery, arrayOfPromises).then(function() {
return Array.prototype.slice.call(arguments, 0);
});
};

这必须解决两个问题:

  1. jQuery.when 不是接受数组,而是接受可变数量的参数,因此我们必须使用 apply 调用它,以给它我们的 promise 数组。
  2. 组合的 Promise 是通过多个参数而不是单个数组参数来解析的,因此我们必须将 arguments 转换为真正的数组(使用 slice )。

因此:

var getAnimal = function(animal) {
return $.get('animals/' + animal);
};

var arrayOfPromisesToAnimals = ['frog', 'cat', 'horse'].map(getAnimal);

var promiseToArrayOfAnimals = all(arrayOfPromisesToAnimals);

promiseToArrayOfAnimals.then(function(arrayOfAnimals) {

arrayOfAnimals.forEach(function(animal) {
console.log(animal);
});
});

关于jquery - 如何将 Promise 对象数组转换为数组的 Promise 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16213391/

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