为什么Reflux.js listenAndPromise助手不起作用?

时间:2015-06-18 23:34:16

标签: javascript reactjs refluxjs

我正在使用qwest查询我的端点,如下所示,onGetResourceCompleted处理程序按预期触发,但数据未定义。为什么呢?

var Actions = Reflux.createActions({
  'getResource': { asyncResult: true }
});

Actions.getResource.listenAndPromise(function (id) {
  return qwest.get('http://localhost:8000/my-data/'+id, null, { withCredentials: true });
});


var MyStore = Reflux.createStore({

  listenables: Actions,

  init: function () {
    Actions.getResource('');
  },

  onGetResourceCompleted: function (data) {
    console.log('OK', data); // Get's called but data is undefined. Why?
  }

});

我可以通过查看开发工具以及通过简单地执行以下方式单独调用qwest来正确加载数据:

qwest.get('http://localhost:8000/my-data/'+id, null, { withCredentials: true }).then(function(data) {
  console.log('OK', data);
});

同时执行以下工作

ServiceActions.getResource.listen(function (id) {
  ServiceActions.getResource.promise(
    qwest.get('http://localhost:8000/my-data/'+id, null, { withCredentials: true })
  );
});

1 个答案:

答案 0 :(得分:0)

我已经对这个"确认的错误"的原因发表了一些评论。在github.com/spoike/refluxjs开始的原始问题中。

所以,尽管你按照预期的方式使用反流功能,并且他们确实创造了一种竞赛条件,甚至没有返回比赛结果,我认为你很幸运。事实证明,当您已经有一个承诺时,您在此类请求的组合中使用的两个特定功能有点多余。我建议您完全放弃onGetRequestCompleted处理程序,并使用处理已解决的承诺的标准承诺方式处理完成,这无论如何都会给您更多的灵活性。

例如:

var MyStore = Reflux.createStore({

  listenables: Actions,

  init: function () {
    Actions.getResource('')
      .then()  <-- this eliminates the need for onGetResourceCompleted
      .catch() <-- or this instead/in addition
      .finally() <-- or this instead/in additon
  },

  // no more onGetResourceCompleted

});