2016-05-30 17 views
7

Voglio spingere le funzioni con i parametri a un array senza eseguirli. Ecco cosa ho provato fino ad ora:Aggiungere funzioni con parametri all'array Javascript (Node.js)

var load_helpers = require('../helpers/agentHelper/loadFunctions.js'); 
var load_functions = []; 
load_functions.push(load_helpers.loadAgentListings(callback , agent_ids)); 
load_functions.push(load_helpers.loadAgentCount(callback , agent_data)); 

Ma in questo modo le funzioni vengono eseguite mentre si spinge. This Question fornisce un esempio simile ma senza parametri. Come posso includere parametri in questo esempio?

+0

siete diretto alla struttura array? Altrimenti suggerirei una soluzione con un oggetto contenente riferimenti alla funzione e agli argomenti. –

+0

Sì, ho bisogno di passare questo array a 'async.parallel ([], callback());' Potrebbe esserci una soluzione con l'oggetto. –

risposta

1

funzioni push che fare quello che vuoi:

load_functions.push(
() => load_helpers.loadAgentListings(callback, agent_ids),  
() => load_helpers.loadAgentCount (callback, agent_data) 
); 
3

È necessario associare i parametri alla funzione. Il primo parametro è 'thisArg'.

function MyFunction(param1, param2){ 
    console.log('Param1:', param1, 'Param2:', param2) 
} 

var load_functions = []; 
load_functions.push(MyFunction.bind(undefined, 1, 2)); 
load_functions[0](); // Param1: 1 Param2: 2 
+0

Semplice e preciso! Grazie. :) –

+2

No, non ** devi ** legare i parametri, anche se questo è un approccio. È più leggibile e idiomatico con le funzioni di freccia scrivere '() => Myfunction (1, 2)'. –

1

È possibile avvolgere elementi con funzione simile aggiunto, cerchiamo di deridere load_helpers

var load_helpers = { 
    loadAgentListings: function(fn, args) { 
    args.forEach(fn) 
    } 
} 

e tenta di utilizzare in quel modo :

var a = [] 

a.push(function() { 
    return load_helpers.loadAgentListings(function(r) { 
    console.log(r) 
    }, ['a', 'b', 'c']) 
}) 

a[0]() // just execution 

Tutto dipende da quale livello si desidera passare argomenti aggiuntivi, secondo proof of concept

var a = [] 

a.push(function(args) { 
    return load_helpers.loadAgentListings(function(r) { 
    console.log(r) 
    }, args) 
}) 

a[0](['a', 'b', 'c']) // execution with arguments 

con le associazioni:

var a = [] 

a.push(load_helpers.loadAgentListings.bind(null, (function(r) {return r * 2}))) 

console.log(a[0]([1, 2, 3])) // execution with additional parameters