如何在计算绑定中返回 header 后调用铁 ajax 异步

How to invoke iron ajax async after returning header in computed binding

Polymer 1.* 和 Firebase

如何在 return '{"Authorization": "Bearer ' + token + '"}'; 之后调用 this.$$('#ironAjax').generateRequest(); 进行异步操作?我必须 return header 值,然后调用 iron-ajax 请求。

<iron-ajax
  url="[[HOST]][[LISTINGS]]?foo=foo"
  id="ironAjax"
  handle-as="json"
  headers="[[setAuth()]]",
  on-error="errorHandler"
  loading="{{ironLoading}}"
  last-response="{{listings}}"></iron-ajax>

 pageActivated: function(activated) {
    if (activated) {
      this.setAuth();
    }
  },

setAuth: ()=> {
  firebase.auth()
    .onAuthStateChanged((token) => {
      return '{"Authorization": "Bearer ' + token + '"}';

      this.$$('#ironAjax').generateRequest();  // NEED TO CALL AFTER
                                               // HEADER IS SET 

    })

我能够通过直接修改 header 来处理这种情况。希望这可以帮助处于相同情况的其他人:

行为:

<script>
  AuthIronAjax = {
    rawSetAuth: (user, ajax) => {
      if (user) {
        user.getIdToken().then((token) => {
          ajax.headers['Authorization'] = 'Bearer ' + token;
          ajax.generateRequest();
        });
      }
    },

    setAuth: function (ajax) {
      firebase.auth()
        .onAuthStateChanged((user)=> this.rawSetAuth(user, ajax));
    }
  };
</script>

它在其中使用的元素。注意:iron-pages 与隐含主机 属性 绑定一起使用 activated:

observers: ['pageActivated(activated)'],

  behaviors: [AuthIronAjax],

  pageActivated: function(activated) {
    if (activated) {
      this.setAuth(this.$.ironAjax);
    }
  },