1

我正在使用 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 })
  );
});
4

1 回答 1

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

});
于 2015-07-24T09:51:56.093 回答