尝试循环访问 Map 元素时出现类型错误



我正在尝试迭代我认为是Map对象的元素,并得到以下错误:

TypeError: cr.forEach is not a function
at exports.onNewOrder.functions.database.ref.onCreate.event (/user_code/index.js:122:12)
at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27)
at next (native)
at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71
at __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36)
at /var/tmp/worker/worker.js:728:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)

以下是我在Google Cloud Function中运行的代码:

function logMapElements(value, key, mapObj) {
console.log(`m[${key}] = ${value}`);
}    
exports.onNewOrder = functions.database.ref('/orders/{orderId}').onCreate(event => {
const data = event.val();
const cr = data.crs;
console.log(cr);
cr.forEach(logMapElements);
}

这是console.log(c)在日志中打印的内容:

{ cr_36446aba912c45d0956e57cbf0a4e165: 1, cr_d46f4c12119e45478a0aa2867df55e09: 1 }

我在这里做错了什么?

虽然来自 Sidhanshu_、user9977547 和 Fabien Greard 的答案都可能有效,但我认为使用 Firebase 的内置DataSnapshot.forEach方法更习惯:

exports.onNewOrder = functions.database.ref('/orders/{orderId}').onCreate(event => {
event.child("crs").forEach(child => {
console.log(child.val());
});
}

虽然Array.forEach()DataSnapshot.forEach()之间的结果在这里是相同的,但在其他一些情况下却有细微的区别。当您从 Firebase 数据库查询数据时,DataSnapshot.forEach()将按请求的顺序迭代子级,而您通常会在到达Array.forEach()时丢失该顺序。为了避免细微的错误,我建议对 Firebase 数据库中的任何数据使用DataSnapshot.forEach()

你必须像这样使用它:

Object.keys(object).map(function(objectKey, index) {
var value = object[objectKey];
console.log(value);
});

forEach()只在数组上工作,cr是一个object

您可以改用map()。或者将你的 obect 转换为带有Object.values()的数组(另请参阅Object.keys()Object.entries()

因为 cr 不是一个数组,所以 不能将数组的方法与它一起使用。尝试在此处使用for (bar propertyName in object)循环。

for(var id in cr){
var value = cr[id]
...
}

相关内容

  • 没有找到相关文章

最新更新