javascript - 通过节点js将数据更新到firebase项目列表时检查更新结果
问题描述
我想通过节点js将一些数据添加到firebase中的项目列表中,但我不知道如何检查更新过程是否失败。这是我的工具:
// set data to json
let servicesJson = {
"car_services": [services],
"car_services_status": 1
}
// add car service to province
let provinceIdNumber = parseInt(provinceId, 10);
var areaRef = db.ref("areas")
areaRef.orderByChild('province_id').equalTo(provinceIdNumber).once('value', function (areaSnapshots) {
if (areaSnapshots.val() != null) {
var result = true
areaSnapshots.forEach (function (child) {
let currentTime = new Date().toISOString();
servicesJson.last_updated = currentTime
child.ref.update(servicesJson, function (error) {
if (error) {
console.log("*** error ***")
result = false
} else {
console.log("*** success ***")
result = true
}
})
});
console.log("*** finished ***")
res.send({ 'success': result });
} else {
res.send({ 'success': false, 'error_code': 'CSTP05', 'error_msg': 'Cant find any area of province to update car service' });
}
});
这是日志:
*** finished ***
*** success ***
*** success ***
*** success ***
*** success ***
我怎样才能等到循环结束然后返回结果?
解决方案
使用承诺
// set data to json
let servicesJson = {
car_services: [services],
car_services_status: 1
};
// add car service to province
let provinceIdNumber = parseInt(provinceId, 10);
var areaRef = db.ref("areas");
const updatePromise = new Promise((resolve, reject) => {
const changedCount = 0;
areaRef
.orderByChild("province_id")
.equalTo(provinceIdNumber)
.once("value", function(areaSnapshots) {
if (areaSnapshots.val() != null) {
areaSnapshots.forEach(function(child) {
let currentTime = new Date().toISOString();
servicesJson.last_updated = currentTime;
child.ref.update(servicesJson, function(error) {
if (error) {
changedCount++;
console.log("*** error ***");
} else {
changedCount++;
console.log("*** success ***");
}
});
if (areaSnapshots.length === changedCount) {
console.log("*** finished ***");
resolve({ success: true });
}
});
} else {
reject({
success: false,
error_code: "CSTP05",
error_msg: "Cant find any area of province to update car service"
});
}
});
});
updatePromise
.then(data => {
res.send(data);
})
.catch(error => {
res.send(error);
});
推荐阅读
- java - 我的 android 应用程序的数据库 SQLite 的排序结果有问题
- javascript - 无法更新 Set 属性
- javascript - JavaScript 中的反向混合颜色
- discord.js - 丰富的 Minecraft 玩家数量
- c - 使用 OCI 连接池时连接速度很慢
- javascript - 通过 JavaScript 渲染 MathJax 效果不佳
- javascript - 如何在js中为具有两个不同间隔的组件设置动画
- sql - sql问题的问题可能与拥有和计数有关
- python - MongoDB对同一服务器的多次访问
- arrays - VBA宏完成时数组变量值是否可以保留