2016-04-01 3 views
2

ich zu promisify the native XHR versuchen,Wie kann man ein XHR "promisable" machen und trotzdem das XHR-Objekt zurückgeben?

jetzt hier ist das Problem, wenn ich den folgenden Code verwenden:

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(); 
    }); 
} 

es gibt ein Versprechen statt einem XHR Objekt,

so kippe ich Gebrauch so etwas wie xhr.abort() auf diese Weise:

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

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

gibt es trotzdem, es gibt ein XHR Objekt zu machen und noch ke ep es versprechbar?

edit: Dies fragt nicht, wie ein XHR-Objekt promisifiziert wird, sondern wie ein "promistified" XHR-Objekt das XHR-Objekt anstelle der Promise zurückgibt.

+2

Verwandte oder Duplikat von: http://StackOverflow.com/Questions/30008114/How-Do-I-Promisify-Native-Xhr – k0pernikus

+0

Eine Idee könnte AngularJS API zu inspirieren: http: //StackOverflow.com/ Fragen/13928057/how-to-Abbrechen-ein-http-Anfrage-in-angularjs – pdem

Antwort

1

Sie müssten einen Verweis auf die rohe XHR oder sogar die abort() Methode zurückgeben.

Zum Beispiel zurückkehren so etwas wie ...

return { 
    promise: promise, 
    xhr: xhr 
}; 

Dann könnte der anruf Code request().xhr.abort() verwenden.

Offensichtlich müssen Sie diese 2 Variablen erstellen und das XHR außerhalb des Promise Callbacks erstellen.

Wenn Sie wirklich wollten, dass es so funktioniert, wie Sie es beschrieben haben, könnten Sie die Eigenschaft auf das Promise-Objekt setzen, aber es könnte eine verwirrende API sein.

Verwandte Themen