我还是Promise的新手(如Promises/A+,而不是jQuery),并希望将一些旧的客户端代码转换为返回Promise,以便下游可以可以而是必须将回调传递给上游,特别是与网络存储和AJAX有关。
问题是,我正在使用的AJAX库(Oboe),它有一个jQuery风格的API但没有.then
方法,这意味着我需要自己构造并返回new Promise
,但是遵循最佳方法?我们可以使用静态Promise.resolve
和Promise.reject
做一些事情而不包装函数吗?我的例子如下:
旧代码
function makeRequest(uri, callback) {
var request = ajax(uri);
request.fail(function(err) {
// handle failure
});
request.done(function(res) {
callback(res);
});
}
新代码
function makeRequest(uri) {
return new Promise(function(resolve, reject) {
var request = ajax(uri);
request.fail(function(err) {
reject(err);
});
request.done(function(res) {
resolve(res);
});
});
}
更好的代码?
function makeRequest(uri) {
var request = ajax(uri);
request.fail(function(err) {
// handle failure
});
request.done(function(res) {
// handle complete
});
// this won't work without third-party .then support
return Promise.resolve(request);
}
(我打算单独使用原生的Promise和polyfill来做这件事,但如果有图书馆有这方面的帮助,我很高兴看看他们的实现。)