Tru*_*an1 2 javascript jquery promise jquery-deferred
我试图通过jQuery迁移到使用promises.在我的原始代码中,我有一个回调参数,它接受修改后的数据:
var getRss = function (url, fnLoad) {
$.get(url, function (data) {
var items = [];
$(data).find('item').each(function (index) {
items.push({
title: $(this).find('title').text(),
pubDate: $(this).find('pubDate').text()
});
});
fnLoad(items);
});
}
Run Code Online (Sandbox Code Playgroud)
我尝试更改为promise,但"done"返回未修改的数据而不是解析的数据:
var getRss = function (url) {
return $.get(url).done(function (data) {
var items = [];
$(data).find('item').each(function (index) {
items.push({
title: $(this).find('title').text(),
pubDate: $(this).find('pubDate').text()
});
});
});
}
Run Code Online (Sandbox Code Playgroud)
然后像下面一样使用它,但我得到原始的XML版本,而不是转换为对象的修改版本:
getRss('/myurl').done(function (data) {
$('body').append(template('#template', data));
});
Run Code Online (Sandbox Code Playgroud)
你想使用then(阅读文档pipe,参见pipe()然后()文档与jQuery 1.8中的实际):
function getRss(url) {
return $.get(url).then(function (data) {
var items = [];
$(data).find('item').each(function (index) {
items.push({
title: $(this).find('title').text(),
pubDate: $(this).find('pubDate').text()
});
});
return items;
});
}
Run Code Online (Sandbox Code Playgroud)
......有点像
function getRss(url) {
var dfrd = $.Deferred();
$.get(url).done(function (data) {
var items = [];
$(data).find('item').each(function (index) {
items.push({
title: $(this).find('title').text(),
pubDate: $(this).find('pubDate').text()
});
});
dfrd.resolve(items);
}).fail(dfrd.reject);
return dfrd.promise();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |