2

JavaScript アプリケーションの promise ライブラリとして D.js を使用しています。以下は私のサンプルコードです:

function getData(deferred) {
  var data_one;

  // getInfo is returning a promise for async task
  getInfo()
   .then(function (resp_one) {
      data_one = resp_one;
      // getInfo2 is also returning another promise
      return getInfo2();
   })
   .then(function (resp_two) {
     deferred.resolve('prefix' + data_one + resp_two);
   });
};

function sample () {
  var d = D(),
    data = localStorage.getItem('key');

  if (data) {
    d.resolve(data);
  } else {
    getData(d);
  }
  return d.promise;
}

sample().then(function (data) {
  //do something with data.
});

私はサンプル関数を呼び出しています。サンプル関数とサブ関数内の実装は、promise のコーディング標準に従っていますか? プロミスは初めてです。遅延オブジェクトを他の関数に渡して解決/拒否するのは良いことですか?? 上記の機能を実装するより良い方法はありますか??

前もって感謝します..

4

1 に答える 1

2

promise をより自然な方法で使用すると、コードを改善できるようです。

まず第一にgetData、 Promise を返す場合、パスする必要はありませんdeferred。これはアンチパターンと見なされます。単に戻るだけですgetInfo()

別のこととして、sample関数内dataですでに利用可能な場合は、D.promisifyメソッドを使用して解決されたプロミスを非プロミス値で返すと便利です。

function getData() {
    var data_one;
    return getInfo().then(function (resp_one) {
        data_one = resp_one;
        return getInfo2();
    })
    .then(function (resp_two) {
        return 'prefix' + data_one + resp_two;
    });
};

function sample() {
    var data = localStorage.getItem('key');
    return data ? D.promisify(data) : getData();
}

sample().then(function (data) {
    //do something with data.
});
于 2015-02-12T12:44:07.760 に答える