为什么我不能将参数传递给.then函数(AngularJS)?

时间:2014-11-28 11:14:09

标签: javascript angularjs

我有这个功能

$scope.updateValue = function(key, selectedProductname, numberUsed){

var selectedKey = key;
var selectedProductname = selectedProductname;
var numberUsed = numberUsed;

var useageRef = ref.child('/useage/');
var updateObj = $firebase(useageRef);

var myData = {
    productName : selectedProductname,
    numberUsed : numberUsed
}

var decrementLocation = inventoryRef.child(key + '/amount')

updateObj.$push(myData).then(

    decrementLocation.transaction(function (current_value, numberUsed) {
           console.log(numberUsed);
          return (current_value || 0) - 1;

})

    );  
}

我通过" numberUsed"进入$ scope.updateValue并在myData中使用它,然后将其推送到服务器并且没有问题,但是当我在此行使用它时##; decrementLocation.transaction(function(current_value,numberUsed){&#34} ;然后我尝试console.log(numberUsed);控制台说未定义。为什么?我怎么能在这一行中使用numberUsed" decrementLocation.transaction(function(current_value,numberUsed){"?how成功编码?

1 个答案:

答案 0 :(得分:1)

这里有很多事情要发生。

首先,在以下代码中:

    decrementLocation.transaction(function (current_value, numberUsed) {
       console.log(numberUsed);
      return (current_value || 0) - 1;
    })

您正在重新声明numberUsed作为.transaction()回调函数的第二个参数。因此,无论numberUsed在这个小函数之外是什么无关紧要。如果要使用周围函数中的var,则需要执行以下操作:

    decrementLocation.transaction(function (current_value) {
       console.log(numberUsed);
      return (current_value || 0) - 1;
    })

其次,;功能没有关闭.transaction()。我不认为这会对你在这里的经营产生重大影响,但不能确定。这应该通过jslint / jshint运行。

第三,您要在整个周围numberUsed函数中重新声明$scope.updateValue()

$scope.updateValue = function(key, selectedProductname, numberUsed){
    var numberUsed = numberUsed;

因此,您要声明一个新变量numberUsed,其值为numberUsed,但它是一个新变量,因此应设置为undefined。如果它被设置为任何东西,那将是令人惊讶的。如果你需要var,那么你应该这样做:

$scope.updateValue = function(key, selectedProductname, numberUsed){
    var nu2 = numberUsed;

或类似的东西。但即便如此,为什么还要重新调整var?无论如何它都是按值复制的。

一个好的linter会抓住任何这个。