2016-07-28 12 views
1

den Beispielcode zum Betrachten:eine Funktion mit Standardparametern aufrufen, die auch einen Rückruf hat

function makeRequest(endpoint, form = {}, qs = {}, callback) { 
    const exampleObject = { 
    endpoint, 
    form, 
    qs, 
    }; 
    callback(exampleObject); 
} 

makeRequest('/example', { foo: 'string' }, { bar: 'string' }, (exampleObject) => { 
    console.log(exampleObject); 
}); 

Im obigen Beispiel würde das folgende Objekt auf der Konsole protokolliert werden:

{ endpoint: '/example', 
    form: { foo: 'string' }, 
    qs: { bar: 'string' } } 

Wie kann ich Verwenden Sie die Standardeinstellungen in makeRequest und nutzen Sie immer noch den Rückruf? Zum Beispiel schlägt die folgende:

makeRequest('/example', (exampleObject) => { 
    console.log(exampleObject); 
}); 

Ausgang:

/Users/daniel/example.js:13 
    callback(exampleObject); 
^

TypeError: callback is not a function 
    at makeRequest (example.js:7:3) 
    at Object.<anonymous> (example.js:10:1) 
    at Module._compile (module.js:409:26) 
    at loader (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:148:5) 
    at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/babel-cli/node_modules/babel-register/lib/node.js:158:7) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Function.Module.runMain (module.js:441:10) 
    at /usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:160:24 
    at Object.<anonymous> (/usr/local/lib/node_modules/babel-cli/lib/_babel-node.js:161:7) 

Dies macht Sinn, in Anbetracht sende ich nur ein Parameter. Ich frage mich, wie ich makeRequest unter Ausnutzung der Standardparameter aufrufen und immer noch den Rückruf erhalten kann. Muss ich immer drei Parameter übergeben, wenn ein Callback existiert? Gibt es eine andere Möglichkeit, dies zu tun, so habe ich die Option, nur die 2. und 3. Parameter bei Bedarf zu verwenden und immer im Rückruf zu bekommen?

+3

nicht Rückrufe verwenden. Rückgabeversprechen. – Bergi

Antwort

4

Wie wäre es destructuring verwenden?

function makeRequest({ endpoint, form = {}, qs = {}, callback =() => {} }) { 
 
    const exampleObject = { 
 
    endpoint, 
 
    form, 
 
    qs, 
 
    }; 
 

 
    callback(exampleObject); 
 
} 
 

 
makeRequest({ 
 
    endpoint: '/example', 
 
    callback: (x) => console.log(x) 
 
});

+0

So etwas habe ich genau gesucht. Vielen Dank! – Daniel

3

Passing undefined die default parameter

makeRequest('/example',undefined,undefined,(exampleObject) => { 
    console.log(exampleObject); 
}); 
+0

Das funktioniert in der Tat, danke für die Bereitstellung der Verbindung, so dass ich es lesen kann. Nur Frage, die ich habe, ist es möglich, die gleichen Ergebnisse zu erhalten, ohne den 2. und 3. 'undefined' Parameter zu übergeben? – Daniel

+0

Sie müssten einen Funktionsüberlademechanismus implementieren/finden, um dies mithilfe von Parametern durchführen zu können. Andreas Antwort ist ein fantastischer Weg, um es mit einem Objekt und wahrscheinlich eher nach dem, wie Sie die Funktion nennen wollen, zu tun. –