2

jQuery 経由で promise を使用するように移行しようとしています。元のコードには、変更されたデータを受け取るコールバック パラメーターがあります。

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);
    });
}

約束に変更しようとしましたが、「完了」は解析されたデータではなく、変更されていないデータを返します。

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()
            });
        });
    });
}

次に、以下のように使用しますが、オブジェクトに変換された変更されたものではなく、元の XML バージョンを取得します。

 getRss('/myurl').done(function (data) {
      $('body').append(template('#template', data));
  });
4

1 に答える 1

7

使用したいthen(ドキュメントを読んで、pipe()およびthen()ドキュメントとjQuery 1.8の現実をpipe参照してください):

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;
    });
}

…次のように機能します

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();
}
于 2013-02-25T14:18:11.330 に答える