我正在尝试使用jquery.ajax从一个通量的行动使用Fluxxor。我正在处理http://fluxxor.com/guides/async-data.html的异步示例。
调用是成功的(我得到了响应),但我不知道为什么它不调度LOAD_BUZZ_SUCCESS。
我要替换这段代码:
var BuzzwordClient = {
load: function(success, failure) {
setTimeout(function() {
success(_.range(10).map(Faker.Company.catchPhrase));
}, 1000);
}
//...
};使用
var BuzzwordClient = {
load: function(success, failure) {
jquery.ajax({
url: "test.json",
dataType: 'json',
cache: false,
success: function(data) {
console.log("success");
console.log(data);
}.bind(this),
error: function(xhr, status, err) {
console.log("error");
}.bind(this)
});
}
//...
};这个调用来自于action var:
BuzzwordClient.load(function(words) {
this.dispatch(constants.LOAD_BUZZ_SUCCESS, {words: words});
}.bind(this), function(error) {
this.dispatch(constants.LOAD_BUZZ_FAIL, {error: error});
}.bind(this));
}我需要用其他东西包装ajax调用吗?客户端的加载函数应该返回什么?
发布于 2015-07-09 22:04:42
当你打电话的时候
BuzzwordClient.load(function(words) {
this.dispatch(constants.LOAD_BUZZ_SUCCESS, {words: words});
}.bind(this), function(error) {
this.dispatch(constants.LOAD_BUZZ_FAIL, {error: error});
}.bind(this));传递给load的两个函数在load方法中的参数success和failure中可用:
var BuzzwordClient = {
load: function(success, failure) {但这些函数从未被调用过。请注意原始示例是如何调用传递的success函数的,传递的单词如下:
success(_.range(10).map(Faker.Company.catchPhrase));在Ajax回调中也需要这样做:
var BuzzwordClient = {
load: function(success, failure) {
jquery.ajax({
url: "test.json",
dataType: 'json',
cache: false,
success: function(data) {
success(data); // or something similar
},
error: function(xhr, status, err) {
failure(err); // or something similar
}
});
}
//...
};下面是一个简单的例子:http://jsfiddle.net/BinaryMuse/6p98L2h8/
客户端的加载函数应该返回什么?
通常,异步函数不会返回任何内容。您所关心的值直到稍后时间才可用(这使它成为异步的),因此您需要使用回调来执行流。
您也可以使用类似的承诺来抽象化其中的一部分,但是在JavaScript中,您仍然会在某个时候回到回调。
https://stackoverflow.com/questions/31309760
复制相似问题