现在我在核心文件中使用 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);
在阅读了 Bluebird 文档和许多关于延迟反模式的博客文章后,我想知道这种模式是否实用。我可以将其更改为以下内容:
核心.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;
});
获取位置.js
var location = core.getMyLocation('Petersburg')
.then(function(response) {
// do something
})
.catch(function(error) {
throw new Error();
});
我想我对拥有一个使用 jquery 处理 xhr 请求的中央库的最佳方式感到困惑,但 Bluebird 用于承诺。