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



在这个片段中,来自 Angular 文档 关于 $resource ,函数的名称是user的,在函数内部他们使用同名的变量。

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

这有什么意义?围绕这一点的规则是什么?

当你调用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() ,这会将其保存到服务器等。

从本质上讲,它没有错,只是要注意执行顺序。

"user" 不是函数的名称,而是从给定资源读取的对象名称。

正确地说。用户成为代理,当http请求完成时,它充满了数据。

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

因此,当调用 .get 时,它的工作方式完全是这样的:

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

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

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

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

最新更新