我有一个Deferred对象数组,我试图在完成后将其映射到已解析的值。我想在一切都完成解析后返回数组。
这是我到目前为止所拥有的:
$.when.apply(null, deferredArray)
.pipe(function(){
return deferredArray;
});
不幸的是,这会返回处于已解析状态的Deferred对象数组。
有什么方法可以直接访问已解析的元素吗?我知道我可以单独在已解析的Deferred对象数组上链接.then
和.pipe
,但这不适用于我的目的。
答案 0 :(得分:2)
延迟对象的设计不是返回任何值。你必须在回调中处理结果。
结果作为参数传递给done
,fail
或pipe
回调:
$.when.apply(null, deferredArray).then(function(){
// arguments[0] is the result of the first deferred object
// arguments[1] is the result of the second deferred object
// ...
// or simple pass it to a function that needs the results:
someFunction(arguments);
});
您也可以将该功能设置为回调:
$.when.apply(null, deferredArray).then(someFunction);
答案 1 :(得分:-1)
这是一个hacky解决方案:
extractDeferredArray = function(array) {
var deferred, extract, ret;
ret = [];
extract = (function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = array.length; _i < _len; _i++) {
deferred = array[_i];
_results.push(deferred.then(function(value) {
return ret.push(value);
}));
}
return _results;
})();
// Make sure our .then methods have completed
return $.when.apply(null, extract).pipe(function() {
return ret;
});
};
看起来有点尴尬。