2016-05-30 11 views
7

Chcę przekazać funkcje z parametrami do tablicy bez wykonywania ich. Oto co próbowałem dotąd:Dodaj funkcje z parametrami do 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)); 

Ale w ten sposób funkcji pobiera wykonywane podczas pchania. This Question zapewnia podobny przykład, ale bez parametrów. Jak mogę uwzględnić params w tym przykładzie?

+0

Czy jesteś zobowiązany do struktury tablicy? Inaczej proponuję rozwiązanie z obiektem zawierającym odniesienia do funkcji i argumentów. –

+0

Tak Muszę przekazać tę tablicę do 'async.parallel ([], callback());' Może istnieć obejście z obiektem. –

Odpowiedz

1

funkcje push który rób co chcesz:

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

Musisz powiązać parametrów z funkcją. Pierwszy parametr to "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

Prosty i precyzyjny.! Dziękuję Ci. :) –

+2

Nie, nie ** musisz ** wiązać parametry, chociaż to jest jedno podejście. Jest bardziej czytelny i idiomatyczny dzięki funkcjom strzałek do pisania '() => Moja funkcja (1, 2)'. –

1

można zawinąć dodaje elementy z funkcji takiego, niech drwić load_helpers

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

I spróbuj użyć go w ten sposób :

var a = [] 

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

a[0]() // just execution 

Wszystko zależy od tego, jaki poziom chcesz przekazać dodatkowe argumenty, drugi dowód koncepcji

var a = [] 

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

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

Z wiązaniami:

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