集合回调忽略范围变量

时间:2015-02-18 11:03:14

标签: javascript meteor

以下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也会返回一个值。

1 个答案:

答案 0 :(得分:1)

看起来Collection2正在修改data对象而不进行防御性克隆。尝试自己制作克隆:

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