在jQuery中,可以通过使用闭包将id从函数传递到promise.all。闭包是指函数内部定义的函数,它可以访问外部函数的变量和参数。下面是一个示例代码:
function getData(id) {
// 创建一个Deferred对象
var deferred = $.Deferred();
// 异步获取数据
$.ajax({
url: 'example.com/api/data/' + id,
success: function(response) {
// 数据获取成功时,将数据传递给resolve方法
deferred.resolve(response);
},
error: function() {
// 数据获取失败时,将错误信息传递给reject方法
deferred.reject('Error retrieving data');
}
});
// 返回一个Promise对象
return deferred.promise();
}
// 定义一个包含多个id的数组
var ids = [1, 2, 3, 4, 5];
// 使用map方法将每个id传递给getData函数,并返回一个包含Promise对象的数组
var promises = $.map(ids, function(id) {
return getData(id);
});
// 使用promise.all方法等待所有Promise对象都完成
$.when.apply($, promises).then(function() {
// 当所有Promise对象都完成时,执行回调函数
var results = Array.prototype.slice.call(arguments);
// 处理结果
$.each(results, function(index, result) {
console.log('Data for id ' + ids[index] + ':', result);
});
}).fail(function(error) {
// 当有任何一个Promise对象失败时,执行错误处理函数
console.error('Error:', error);
});
在上面的代码中,我们定义了一个getData
函数,它接受一个id作为参数,并返回一个Promise对象。在getData
函数内部,我们使用$.ajax
方法异步获取数据,并通过deferred.resolve
方法将数据传递给Promise对象的成功回调函数。如果获取数据失败,则通过deferred.reject
方法将错误信息传递给Promise对象的失败回调函数。
然后,我们定义了一个包含多个id的数组ids
,并使用$.map
方法将每个id传递给getData
函数,返回一个包含Promise对象的数组promises
。
最后,我们使用$.when.apply($, promises)
方法等待所有Promise对象都完成,并通过.then
方法指定当所有Promise对象都完成时的回调函数。在回调函数中,我们可以通过arguments
对象获取到每个Promise对象的结果,并进行处理。如果有任何一个Promise对象失败,则通过.fail
方法指定错误处理函数。
这是一个基本的示例,你可以根据具体的业务需求进行修改和扩展。在实际应用中,你可以根据需要使用其他jQuery方法和插件来简化和优化代码。
云+社区技术沙龙[第14期]
云+社区技术沙龙 [第31期]
T-Day
云+社区技术沙龙[第22期]
云+社区技术沙龙[第29期]
serverless days
小程序云开发官方直播课(应用开发实战)
云+社区技术沙龙[第8期]
云+未来峰会
领取专属 10元无门槛券
手把手带您无忧上云