如何使用用于在同一函数内命名函数的变量名称有意义?

时间:2014-12-08 13:48:36

标签: javascript angularjs ngresource

在此代码段中,Angular documentation on $resource中的函数名称为user,函数内部使用的是同名变量。

var User = $resource('/user/:userId', {userId:'@id'});
var user = User.get({userId:123}, function() {
  user.abc = true;
  user.$save();
});

这有什么意义?围绕这个有什么规则?

2 个答案:

答案 0 :(得分:1)

当您致电User.get()时,它会返回一个承诺,并继续处理。当该承诺解析时,angular将您设置的变量设置为user,即分辨率的值。它调用成功回调函数,因此您可以在那时安全地更改它。

使用上面的例子,会发生这种情况。

  1. 你打电话给'User.get({userId:123})
  2. User.get返回一个承诺并将var user设置为该承诺
  3. 处理继续
  4. 承诺解决,让我们说{id:123,name:"Imray"}
  5. angular将变量user设置为{id:123,name:"Imray"}
  6. angular调用您的成功回调,其中:
  7. user.abc设置为true,因此您的对象现在为{id:123,name:"Imray",abc:true}
  8. 您拨打user.$save(),将其保存到服务器等等。
  9. 基本上,它没有任何问题,只要知道执行的顺序。

答案 1 :(得分:0)

"用户"不是函数的名称,它是从给定资源读取的对象的名称。

要正确。当http请求完成时,用户成为填充数据的代理。

第二个参数 - 函数是在用户成功加载后调用的回调,因此用户成为完全创建的对象。

因此,当调用.get时,它的工作原理如下:

  • 使用"代理"
  • 创建变量用户
  • 从/ user / 123
  • 读取用户
  • 用数据和"资源的方法实现用户变量" ($ save,$ delete ...)
  • 调用给定的函数回调,其中:
    • 在用户对象中设置abc
    • 将其保存回资源($ save将POST引入/ user / 123

在文档中,您可以阅读:https://docs.angularjs.org/api/ngResource/service/$resource - (部分使用/退货)

  

"重要的是要意识到调用$ resource对象方法   立即返回一个空引用(对象或数组取决于   IsArray的)。一旦数据从服务器返回现有数据   引用填充了实际数据。这是一个有用的技巧   因为通常将资源分配给当时的模型   由视图呈现。拥有一个空对象导致无法渲染,   一旦数据从服务器到达,则填充对象   随着数据和视图自动重新呈现自己显示   新数据。这意味着在大多数情况下,人们永远不必写一个   动作方法的回调函数。"

"用户"不必作为参数传递,因为在调用回调之前设置了用户。