Javascript 返回延迟的对象数组数组
我试图获取一个“记录”数组,每个记录都包含一个“字段对象”数组(每个对象都有properties.name、.value和.fid) 每个记录数组都是通过API调用对数据库的AJAX调用获得的 我希望稍后能够使用其他代码迭代这些代码,但是,目前,我正在尝试获得数组的结果数组 老实说,我正在努力用承诺来做到这一点 如果我是同步的,我会使用FOR循环并将每个迭代推送到一个数组中,但是异步会给我带来问题 我目前的代码如下。这将返回单个字段数组,而不是数组数组。我想我需要将每个“thisArray”推送到另一个数组。有人愿意帮忙吗 注: ridList是数据库记录ID的简单数组,例如:[“391”、“392”、“393”、“394”、“395”、“398”、“399”、“400”、“396”、“397”、“437”] AVMI_db是AJAX调用从中获取数据的URLJavascript 返回延迟的对象数组数组,javascript,jquery,arrays,ajax,Javascript,Jquery,Arrays,Ajax,我试图获取一个“记录”数组,每个记录都包含一个“字段对象”数组(每个对象都有properties.name、.value和.fid) 每个记录数组都是通过API调用对数据库的AJAX调用获得的 我希望稍后能够使用其他代码迭代这些代码,但是,目前,我正在尝试获得数组的结果数组 老实说,我正在努力用承诺来做到这一点 如果我是同步的,我会使用FOR循环并将每个迭代推送到一个数组中,但是异步会给我带来问题 我目前的代码如下。这将返回单个字段数组,而不是数组数组。我想我需要将每个“thisArray”推送
///////////////////////////////////////////////////////////////
// Get record info for each array member
///////////////////////////////////////////////////////////////
function AVMI_getMultipleRecordInfoFromArray(ridList, AVMI_db) {
var promises = [];
$.each(ridList, function (index,value) {
var def = new $.Deferred();
var thisArray = [];
$.get(AVMI_db, { //******* ITERATIVE AJAX CALL *******
act: 'API_GetRecordInfo',
rid: value
}).then(function(xml2) {
$(xml2).find('field').each(function() {
var $field = {};
$field.fid = $(this).find('fid').text();
$field.name = $(this).find('name').text();
$field.value = $(this).find('value').text();
thisArray.push($field);
});
def.resolve(thisArray);
});
promises.push(def);
});
return $.when.apply(undefined, promises).promise();
};
也许我在这里遗漏了什么,如果我不明白你想要什么,请随时发表评论。我猜你想得到一个数组而不是一个字段数组。为此,您在自己的问题中给出了答案: 我想我需要将每个“thisArray”推送到另一个数组 但让我困惑的是,让我觉得我可能误解了一些东西,就是如果你能做一些像这样复杂的代码,我想你可以做一个简单的改变(或者你在什么地方得到了这个代码?),但无论如何。。。 我无法对此进行测试,因为我必须创建整个API调用,但它应该非常简单:
///////////////////////////////////////////////////////////////
// Get record info for each array member
///////////////////////////////////////////////////////////////
function AVMI_getMultipleRecordInfoFromArray(ridList, AVMI_db) {
var promises = [];
$.each(ridList, function (index,value) {
var def = new $.Deferred();
var thisArray = [];
$.get(AVMI_db, { //******* ITERATIVE AJAX CALL *******
act: 'API_GetRecordInfo',
rid: value
}).then(function(xml2) {
$(xml2).find('field').each(function() {
var $field = [];
$field.push($(this).find('fid').text());
$field.push($(this).find('name').text());
$field.push($(this).find('value').text());
thisArray.push($fields);
});
def.resolve(thisArray);
});
promises.push(def);
});
return $.when.apply(undefined, promises).promise();
您可以创建一个数组,在迭代调用时从中填充该数组,并在承诺执行后返回该数组
function AVMI_getMultipleRecordInfoFromArray(ridList, AVMI_db) {
var promises = [];
var returnValue = []; // to be returned by the promise
$.each(ridList, function (index,value) {
var def = new $.Deferred();
var thisArray = [];
$.get(AVMI_db, { //******* ITERATIVE AJAX CALL *******
act: 'API_GetRecordInfo',
rid: value
}).then(function(xml2) {
$(xml2).find('field').each(function() {
var $field = {};
$field.fid = $(this).find('fid').text();
$field.name = $(this).find('name').text();
$field.value = $(this).find('value').text();
thisArray.push($field);
});
returnValue.push(thisArray);
def.resolve(thisArray);
});
promises.push(def);
});
return $.when.apply(undefined, promises).then(function() {
return returnValue;
}).promise();
};
不是通常的重复,但是你可以在这里找到你的答案,因为这里有很多关于承诺和延迟的信息:谢谢Nelson。我不想引用我想要的,但我感谢你的帮助!事实上,这很简单,但是,出于某种原因,我就是看不到…@DavidStewart,不客气。如果答案有帮助,请投票。谢谢:)谢谢,我基本上就是这么做的。出于某种原因,我的想法遇到了障碍。非常感谢。。。!