Angularjs 将当前登录用户名用于请求 header

Angularjs put current login username to request header

我正在使用 AngularJs 和 Coffee-Script,我需要将当前登录用户名传递给 header 中的后端服务,这意味着我必须通过以下方式检索用户名另一个请求。然而,在 AngularJs 中执行 REST 请求的 $resource 服务似乎是异步的,所以我无法通过以下代码获取用户名:

'use strict'

angular.module('testapp.service').factory 'TestController', [

  '$resource', 'userService'
  ($resource, userService) ->
    userService.getUser().then (user) ->
      console.log(user.name) # <- line 8
      username = user.name # <- line 9
    $resource "/api/path", {},
      get:
        method: 'GET'
        headers:
          'username': username
]

在第 8 行,我可以将用户名打印到控制台。 对于第 9 行,我无法将其传递给下面的 headers 字段。

每次刷新页面时,控制台都会打印用户名,但是当我点击按钮时,没有再次打印。 请帮忙,任何类型的建议都会有所帮助和感激!

我正在使用 AngularJs 1.4

等待发出 $resource 请求,直到 getUser() 承诺得到解决。

编辑:

在调用 TestController.get 之前,获取用户。当对 getUser() 的承诺得到解决时,将用户名作为参数发送,并将你的 $resource.get 包装在另一个函数中,就像他们在这里:

How to pass headers on the fly to $resource for angularjs

angular.module('testapp.service').factory 'TestController', [

  '$resource'
  ($resource) ->
    getWhatevs: (username) ->
        return  $resource "/api/path", {},
          get:
            method: 'GET'
            headers:
              'username': username
    }
};


/* The caller */
userService.getUser().then (user) ->
    console.log(user.name) # <- line 8
    username = user.name # <- line 9
    
    TestController.getWhatevs(username).get()

顺便说一下,TestController 是工厂而不是控制器。