现在问题在于,当我使用以下代码时:
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。
答案 0 :(得分:1)
您需要返回对原始XHR甚至abort()
方法的引用。
例如,返回类似......
的内容return {
promise: promise,
xhr: xhr
};
然后调用代码可以使用request().xhr.abort()
。
显然你需要创建这两个变量,并在Promise回调之外创建XHR。
如果你真的希望它像你描述的那样工作,你可以在Promise对象上设置属性,但它可能是一个令人困惑的API。