gpt4 book ai didi

javascript - 从多个延迟中获取结果并传递给函数

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

我有一个像这样的函数来处理一些数据数组:

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
});

但是如何将其传递给下一个函数呢?

最佳答案

正如您所知,jQuery 的 $.when() 很尴尬,因为它以参数列表而不是数组的形式传递数据。因此,您需要知道的是如何将参数转换为正确的数组。

诀窍是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);

关于javascript - 从多个延迟中获取结果并传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31962351/

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