如何制作XHR"可承诺"并仍然返回XHR对象?

时间:2016-04-01 09:25:25

标签: javascript ajax promise

我试图promisify the native XHR

现在问题在于,当我使用以下代码时:

function request(method, url) {
    return new Promise(function (resolve, reject) {
        var xhr = new XMLHttpRequest();
        xhr.open(method, url);
        xhr.onload = resolve;
        xhr.onerror = reject;
        xhr.send();
    });
}

它返回一个promise而不是一个XHR对象,

所以我不能以这种方式使用像xhr.abort()这样的东西:

xhr = request('GET', 'http://google.com').then(function (e) 
{
    // ...code...
}, function (e)
{
    // ...code...
});

// When user press the stop button.
xhr.abort();

无论如何都要让它返回一个XHR对象并且仍然保持它是可以接受的吗?

编辑:这不是询问如何宣传XHR对象,而是如何制作一个" promisified" XHR对象返回XHR对象而不是Promise。

1 个答案:

答案 0 :(得分:1)

您需要返回对原始XHR甚至abort()方法的引用。

例如,返回类似......

的内容
return {
   promise: promise,
   xhr: xhr
};

然后调用代码可以使用request().xhr.abort()

显然你需要创建这两个变量,并在Promise回调之外创建XHR。

如果你真的希望它像你描述的那样工作,你可以在Promise对象上设置属性,但它可能是一个令人困惑的API。