我仍然是 Promise 的新手(如Promises/A+中,而不是 jQuery),并且想将我的一些旧客户端代码转换为返回 Promise 以便下游可以然后不必将回调传递给上游,特别是,与网络存储和 AJAX 有任何关系。
问题是,我正在使用的 AJAX 库(双簧管.then
),它有一个 jQuery 风格的 API,但没有方法,这意味着我需要自己构造和返回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 来做到这一点,但如果有库对此有帮助,我很高兴看看它们的实现。)