【问题标题】:How to make a XHR "promisable" and still return the XHR object?如何使 XHR “有前途”并且仍然返回 XHR 对象?
【发布时间】:2016-04-01 18:33:11
【问题描述】:

我正在尝试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 对象,而是如何让“承诺”的 XHR 对象返回 XHR 对象而不是 Promise。

【问题讨论】:

标签: javascript ajax promise


【解决方案1】:

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

例如,返回类似...

return {
   promise: promise,
   xhr: xhr
};

那么调用代码可以使用request().xhr.abort()

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多