集合回调忽略范围变量

Collection callback ignoring scope variable

本文关键字:范围 变量 回调 集合      更新时间:2024-01-09

以下data.id变量在控制台中显示为undefined有什么原因吗?

  Meteor.methods({
        'productUpdate': function(_data) {
            var data = {
                id: _data.id,
                name: _data.name.trim(),
                sku: _data.sku.toUpperCase(),
                retail: _data.retail
            };
            Products.update(data.id, {$set: data}, function(error, result) {
                console.log(data.id); // <------ WHY DOES THIS OUTPUT 'undefined'
                if(error)
                    throw new Meteor.Error('validation', error.message, error.invalidKeys[0].name);
                if(result)
                    logActivity('Products', data.id, 'Product updated');
            });
        }
    });

我很困惑,但我一定错过了一些基本的东西。如果我在回调之外定义其他变量,那么它们也会起作用,例如,即使是传入的_data.id也会返回一个值。

Collection2似乎正在修改data对象,而没有进行防御克隆。尝试自己制作一个克隆:

Products.update(data.id, {$set: EJSON.clone(data)}, function () ...)