我有这样的数据结构:
data: [
{
current: true,
id: "3d6266501370d",
name: "Option",
items: [
{
hidden: false,
id: "ed716c12bf8f3",
data: "ffff",
}
],
selected_queries:[
{
id: 67896,
data: "ff",
}
]
},
]
,我只需要编辑每个对象的隐藏字段,其他值则需要保持不变。我创建了这样的代码:
export const editField = (id, status) => {
return new Promise((res) => {
const data = getData();
const newData = data.map(dataItem => {
if (dataItem.current) {
const newDataItem = dataItem.items.map(item => {
if (item.id === id) {
return Object.assign({}, item, {
...item,
hidden: status,
});
} else {
return item;
}
})
return newDataItem;
} else {
return dataItem;
}
})
res(newData);
});
}
但是我得到了一个新的对象,该对象为空。有人可以帮我吗?
答案 0 :(得分:0)
当您致电data = getData()
(根据Marks的评论)时,它将分配data = null
直到getData()
返回。只有这样,它才能更新。因此newData = data.map...
一无所有。您可以在getData
上分配一个回调:
function getData(cb){
data = get the data..
cb(data)
}
//Then use it like:
const data = getData(function(data){
newData = data.map...
});
答案 1 :(得分:0)
您也可以在Promise中转换 getData(),例如:
var promiseData = new Promise(function(resolve, reject) {
resolve(getData());
});
promiseData.then(function(data) {
// THE REST OF YOUR CODE USING "data"
}).catch(function(error){
console.error(error);
});
然后,您将确保已获得所需的数据。