承诺任意第三方模块

时间:2014-09-13 04:14:49

标签: javascript promise es6-promise

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

问题是,我正在使用的AJAX库(Oboe),它有一个jQuery风格的API但没有.then方法,这意味着我需要自己构造并返回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来做这件事,但如果有图书馆有这方面的帮助,我很高兴看看他们的实现。)

0 个答案:

没有答案
相关问题