我有一个这样的函数来处理一些数据:
function ProcessItems(data){
var def = $.Deferred();
var results = [];
$.each(data, function(v, k)
{
// GetItem(k) returns promise
results.push(GetItem(k));
});
return $.when.apply(null, results);
}
我正在尝试使用GetItem(k)函数获取一些项目,然后我想返回所选数据并将其传递给这样的函数:
// data -> JSON array, results -> array of promises
ProcessItems(data).then( function(results) { return ShowItems(results); } )
并使用以下功能显示它:
function ShowItems(items) {
// here items have no data, but only a promise objects
var def = $.Deferred();
$.each(items, function(v, k)
{
alert(k);
});
def.resolve();
return def.promise();
}
我知道我可以从这里的参数中获取数据
$.when.apply(null, results).then(function() {
// arguments[0] etc <= data is here
});
但是如何将它传递给下一个函数?
答案 0 :(得分:1)
正如您所知,jQuery的$.when()
很尴尬,因为它以参数列表的形式传递数据,而不是数组。所以你需要知道的是如何将arguments
转换为正确的数组。
如果您愿意,可以使用Array.prototype.slice.call(arguments)
或[].slice.call(arguments)
。
完整:
function ProcessItems(data) {
var results = $.map(data, function(value, key) {
return GetItem(key);// or GetItem(value) ?
});
return $.when.apply(null, results).then(function() {
return Array.prototype.slice.call(arguments);//convert arguments list to array
});
}
function ShowItems(items) {
//items is an array
items.forEach(function(value, index) {
alert(value);
});
}
ProcessItems(data).then(ShowItems);