Ajax done then 違い

Ajax: done()、then()、和違いを徹底解説!

Ajax: done()、then()、和違いを徹底解説!

Ajaxでよく使われるdone()とthen()。似ているようで異なるこの2つのメソッドの違い、使い分け、そして注意点まで徹底解説!非同期処理をより深く理解し、JavaScriptコードをよりスマートに書きましょう。

done() とは? - 従来からの成功時処理

  • done()は、jQueryにおけるAjaxのDeferredオブジェクトのメソッド
  • Ajaxリクエストが成功時に実行されるコールバック関数を登録
  • 従来から使われてきた、馴染み深い記述方法

$.ajax({
  url: '/path/to/api',
  type: 'GET',
  dataType: 'json'
})
.done(function(data) {
  console.log('成功:', data);
})
.fail(function(error) {
  console.error('エラー:', error);
});

then() とは? - Promiseベースのモダンなアプローチ

  • then()は、JavaScriptのPromiseオブジェクトのメソッド
  • Ajaxリクエストが成功時に実行される処理を登録、さらに処理をつなげて書くことが可能
  • 現代のJavaScript開発における標準的な非同期処理の記述方法

fetch('/path/to/api')
  .then(response => response.json())
  .then(data => {
    console.log('成功:', data);
    return data; 
  })
  .then(processedData => {
    // さらに処理を続ける
  })
  .catch(error => {
    console.error('エラー:', error);
  });

done() vs then() - 違いを理解して使い分けよう!

特徴 done() then()
戻り値 jqXHR オブジェクト 新たな Promise オブジェクト
エラーハンドリング fail() で処理 then() の第二引数または catch() で処理
可読性 処理が複数になると複雑になる場合がある 処理の流れが明確で、複数処理を繋げやすい

注意点 - バージョンとライブラリに気をつけよう

  • jQuery 1.8以降で、then() が jqXHR オブジェクトに追加
  • 古いjQueryバージョンでは、then() は使用できない場合がある
  • 他のライブラリでPromiseを利用する場合は、それぞれの仕様を確認

まとめ

  • then() は、Promiseベースのモダンな記述方法で、可読性と柔軟性に優れている
  • done() は、従来からの記述方法だが、jQueryのバージョンによっては使用できない場合もある
  • 状況に応じて使い分け、より良いJavaScriptコードを目指そう!

参考資料

関連Q&A

Q1: then() を使わずにエラーハンドリングはできますか?

A1: then() を使う場合でも、catch() メソッドでエラーを一括処理できます。

Q2: done() と then() は一緒に使えますか?

A2: 一緒に使うことは可能ですが、可読性が低下するため、どちらかに統一することをおすすめします。

Q3: 古いjQueryバージョンを使っていますが、then() を使いたい場合はどうすれば良いですか?

A3: jQueryを最新バージョンにアップデートするか、Promiseをpolyfillで提供する必要があります。

その他の参考記事:jquery done