【发布时间】:2015-09-11 11:02:36
【问题描述】:
我正在开发我的第一个 react/reflux 应用程序,所以我可能以完全错误的方式解决这个问题。我正在尝试从回流商店的操作处理程序返回一个承诺。这是代表我如何尝试执行此操作的最小代码。如果我在浏览器中显示它,我会收到一条错误消息,指出永远不会捕获承诺,因为在启动操作时不会将 onLogin 函数的结果传回。最好的方法是什么?
var Reflux = require('reflux');
var React = require('react/addons')
const Action = Reflux.createAction();
const Store = Reflux.createStore({
init: function() {
this.listenTo(Action, this.onAction);
},
onAction: function(username, password) {
var p = new Promise((resolve, reject) => {
reject('Bad password');
});
return p;
}
});
var LoginForm = React.createClass({
mixins: [Reflux.connect(Store, 'store')],
login: function() {
Action('nate', 'password1').catch(function(e) {
console.log(e); // This line is never executed
});
},
render: function() {
return (
<a onClick={this.login} href="#">login</a>
)
}
});
React.render(<LoginForm />, document.body);
【问题讨论】:
-
动作不应该有返回值。在存储中的操作处理程序 (onAction) 中,您应该检查凭据并根据您的验证结果,您可以调用另一个操作。所以你可以再做两个动作。一个代表成功,一个代表失败。另一种方法是让您的商店在验证后发送一个触发器,并将验证结果作为您的有效负载。组件应该监听这个 store 事件。
标签: es6-promise refluxjs