当我被问到时,我的服务器应该将一些数据(存储为json)发回给我。为了避免阻塞通信,我设置了2个promises:一个用于读取文件:
function readingfile(survey) {
return new Promise(
function (data_read, err) {
fs.stat(`./data/${survey}.json`, function (err, stat) {
if (err == null) {
fs.readFile(`./data/${survey}.json`, 'utf8', (err, data) => {
data_read((data))
})
} else
console.error(`./data/${survey}.json doesnt exist`)
})
})
}
和一个读取用户的所有文件:
function readingusersurveys(user) {
let questionnaires = [];
let count = 0;
return new Promise(
function (data_read, err) {
user.surveys.forEach((survey) => {
readingfile(survey).then(function (all_surveys) {
count++;
//console.log((all_surveys)) //ok here
questionnaires.push((all_surveys))
if (count == user.surveys.length) {
console.log((questionnaires)) //not ok here (wtf)
data_read((questionnaires))
}
})
})
})
}
以及发送数据的代码段:
[...]
readingusersurveys(req.user).then(function (all_surveys) {
//console.log(all_surveys)
questionnaires.push((all_surveys))
console.log(questionnaires)
if (questionnaires != null) {
res.status(200).json({
questionnaires
});
} else {
res.status(500).json({});
}
})
但是当readusersurveys()返回读取的数据时,它会被大量的\ r \ n填充,使文件不可读。如果我尝试在某处放置JSON.parse,我要么:输入无限循环或数据变得不可读/未定义(例如:{“asset”:[“value”]}变为{“asset”:[Object]})
我试图在任何地方放置一个JSON.parse来改变竞争但没有运气。知道怎么摆脱\ r \ n和/或我的代码中缺少什么? :/
答案 0 :(得分:1)
经过多次尝试后,我发现问题不在于JSON.parse
,而是questionnaire.push
。它没有做我正在做的事情(一起添加2个json数组)。
在此处添加JSON.parse
function readingusersurveys(user) {
let questionnaires = [];
let count = 0;
return new Promise(
function (data_read, err) {
user.surveys.forEach((survey) => {
readingfile(survey).then(function (all_surveys) {
count++;
questionnaires.push(JSON.parse(all_surveys)) // <-- HERE
if (count == user.surveys.length) {
data_read((questionnaires)) //<-- array of JSON at this point
}
})
})
})
}
[...]
readingusersurveys(req.user).then(function (all_surveys) {
questionnaires = (all_surveys) //<-- pushing an array of JSON into another array was what created problems
if (questionnaires != null) {
res.status(200).json({
questionnaires
});
} else {
res.status(500).json({});
}
})
如果我想在那里做一个循环并添加更多调查,我需要使用concat()代替
if (questionnaires[0] == null)
questionnaires = all_surveys
else
questionnaires = questionnaires.concat(all_surveys)