現在、コア ファイルで promise.deferred を使用しています。これにより、中央の場所でプロミスを解決できます。アンチパターンを使用している可能性があることを読んでいて、なぜそれが悪いのかを理解したいと思っています。
私のcore.jsファイルには、次のような関数があります。
var getMyLocation = function(location) {
var promiseResolver = Promise.defer();
$.get('some/rest/api/' + location)
.then(function(reponse) {
promiseResolver.resolve(response);
)}
.catch(function(error) {
promiseResolver.reject(error);
});
return promiseResolver.promise;
}
そして、私のgetLocation.jsファイルには次のものがあります。
var core = require('core');
var location = core.getMyLocation('Petersburg')
.then(function(response) {
// do something with data
}).catch(throw error);
ブルーバードのドキュメントと遅延アンチパターンに関する多くのブログ投稿を読んだ後、このパターンが実用的かどうか疑問に思います。これを次のように変更できます。
core.js
var getMyLocation = function(location) {
var jqXHR = $.get('some/rest/api/' + location);
return Promise.resolve(jqXHR)
.catch(TimeoutError, CancellationError, function(e) {
jqXHR.abort();
// Don't swallow it
throw e;
});
getLocation.js
var location = core.getMyLocation('Petersburg')
.then(function(response) {
// do something
})
.catch(function(error) {
throw new Error();
});
呼び出しにはjqueryを使用し、約束にはBluebirdを使用してxhrリクエストを処理する中央ライブラリを持つ最良の方法は何かに混乱していると思います。