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