1

我仍然是 Promise 的新手(如Promises/A+中,而不是 jQuery),并且想将我的一些旧客户端代码转换为返回 Promise 以便下游可以然后不必将回调传递给上游,特别是,与网络存储和 AJAX 有任何关系。

问题是,我正在使用的 AJAX 库(双簧管.then),它有一个 jQuery 风格的 API,但没有方法,这意味着我需要自己构造和返回new Promise,但是下面的方法是最优的吗?我们可以使用静态而不包装函数来做一些事情Promise.resolvePromise.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 来做到这一点,但如果有库对此有帮助,我很高兴看看它们的实现。)

4

0 回答 0