【发布时间】:2018-06-21 16:21:49
【问题描述】:
我有一个嵌套的 json,它有一个键和值是另一个带有键和值的 json。下面是json。
{
"Testicular Torsion": {
"What is testicular torsion?": "ABC",
"Symptoms": "AB",
"Risks": "AL",
"Diagnosis": "LK",
"Treatment": "UY"
},
"XYZ": {
"X": "ABC",
"Symptoms": "AB",
"Risks": "AL",
"Diagnosis": "LK",
"Treatment": "UY"
}
};
我想要做的是将数据插入到 Firebase 的云 Firestore 中。以下是相同的代码。但问题是,只有第一个键值对(在这种情况下是睾丸扭转键和它的值是另一个 JSON)被插入,而不是其他键值对。为什么会这样,代码中需要做什么?
var string_medical_data = JSON.stringify(medical_json);
var json_medical = JSON.parse(string_medical_data);
function abc(poi){
firestore.collection('medical').doc(poi).set(json_medical[poi])
.then(() => {
return console.log("Added");
})
.catch((e => {
console.log('error: ', e);
return console.log(e);
}))
}
exports.medical = functions.https.onRequest((request, response) => {
var problems = [];
for(var myKey in json_medical) {
problems.push(myKey);
break;
}
for(var i=0;i<problems.length;i++){
// firestore.collection('medical').doc(problems[i]).set(json_medical[problems[i]])
abc(problems[i]);
}
response.send({
'fulfillmentText': `Success!!!`
});
});
【问题讨论】:
-
您在循环中无条件地使用
break- 这将导致该循环仅执行一次。此外,您需要让您的函数等到对set()的所有调用都完成。您应该将所有这些承诺收集到一个数组中,并在它们全部完成后使用Promise.all()发送响应。 -
感谢您的回复。 break 是一个有效的逻辑错误,我现在已将其删除,但由于 nodejs 使用异步调用,我仍然无法添加数据。你能告诉我如何按照上述代码执行 Promise.all 的代码 sn-p。
标签: node.js firebase google-cloud-firestore google-cloud-functions