2016-05-13 19 views
-1

Ich interessiere mich für die Erstellung eines API-Wrappers und die Erweiterung von Axios mit es6-Klassen. Wie ist das möglich? Axios hat eine Methode .Create(), die Sie einen neuen axiosVerwendung der es6-Klasse zum Erweitern von Axios

class Api extends Axios { 
    constructor(...args){ 
    super(..args) 
    this.defaults.baseURL = 'https://api.com' 
    } 
    cancelOrder (id) { 
    return this.put(`/cancel/order/${id}`) 
    } 
} 

Objekt generieren kann ich weiß, ich habe Zugang zu diesem let instance = axios.create().

Irgendwelche Gedanken?

Versuch 1

import axios from 'axios' 
const Axios = axios.create() 

class Api extends Axios { 
    constructor (...args) { 
    super(...args) 
    this.defaults.baseURL = 'https://api.com' 
    } 
    cancelOrder (id) { 
    return this.put(`/cancel/order/${id}`) 
    } 
} 

let api = new Api() 

api.cancelOrder('hi') 
    .then(console.log) 
    .catch(console.log) 

Versuch 2

import axios from 'axios' 

class Axios { 
    constructor() { 
    return axios.create() 
    } 
} 

class Api extends Axios { 
    constructor() { 
    super() 
    this.defaults.baseURL = 'https://api.com' 
    } 
    cancelOrder (id) { 
    return this.put(`/cancel/order/${id}`) 
    } 
} 

let api = new Api() 

console.log(api.__proto__) 

api.cancelOrder('hi') 
    .then(console.log) 
    .catch(console.log) 
+0

ich hier das Problem nicht sicher bin? – Tuvia

+0

@Tuvia das Problem ist, ich versuche, Axios zu erweitern und ich kann nicht :( – ThomasReggi

+0

Sie können nicht erweitern ein "Objekt" in es6. Sie können einen Prototyp jedoch erweitern. Aber ich bin mir nicht ganz sicher, was Sie zu tun versuchen Eine Klasse (definiert durch es6) ist etwas, zu dem du 'new MyClass' machen musst, und das' MyClass' ist die Sache, die du erweitern kannst: – Tuvia

Antwort

0

Wenn man sich die source code von schauen sie scheinen nicht die "Klasse" für Axios aussetzen, nur eine Instanz .

Ich glaube nicht, dass ein Instanzobjekt in es6 erweitert werden kann.


Ihr zweiter Versuch scheint praktikabelste, aber wenn man jedes einzelne axios Methode emulieren möchten, Sie kann haben eine Menge Aufwand.

+0

Ich glaube, ich bin ein wenig verwirrt '.create()'/a "Factory zum Erstellen neuer Instanzen" wurde sogar implementiert, und warum Zugriff auf Axios nicht exportiert wurde. – ThomasReggi

+0

Ich habe keine Ahnung 80] (https://github.com/mzabriskie/axios/blob/master/lib/axios.js#L80) des Codes. Wenn Sie die tatsächliche 'Axios'" Klasse "enthüllen wollen, können Sie immer die Jungs abzweigen projizieren Sie und machen Sie eine PR dafür (während Sie Ihre Gabel in der Zwischenzeit verwenden) – Tuvia

+0

tun ne 'npm installieren axios-es6' – ThomasReggi

0

axios exportiert momentan nicht das Axios Objekt, das intern verwendet wird.

Die Methode .create() instanziiert nur eine neue Instanz.

// Factory for creating new instances 
axios.create = function create(defaultConfig) { 
    return new Axios(defaultConfig); 
}; 

Ich erstellte eine PR, die die Axios Klasse exportiert.

https://github.com/reggi/axios/commit/7548f2f79d20031cd89ea7c2c83f6b3a9c2b1da4

Und ein Github Problem hier:

https://github.com/mzabriskie/axios/issues/320