2016-05-30 12 views
7

paramsを含む関数を配列に渡して、それらを実行せずにプッシュしたいとします。配列にパラメータを持つ関数を追加する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)); 

しかし押しながら関数が実行されます。この方法では:ここでは私がこれまで試してみましたものです。 This Questionは、同様の例を提供しますが、パラメータはありません。この例では、どのようにパラメータを含めることができますか?

+0

は、あなたが配列構造にバインドされていますか?それ以外の場合は、関数と引数の参照を含むオブジェクトを含むソリューションを提案します。 –

+0

はいこの配列を 'async.parallel([]、callback());に渡す必要がありますオブジェクトの回避策があるかもしれません。 –

答えて

1

プッシュ機能:

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

あなたはバインド関数へのパラメータがあります。 最初のパラメータは '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

シンプルで正確!ありがとうございました。 :) –

+2

いいえ、あなたは** **パラメータをバインドする必要はありませんが、これは1つの方法です。 '()=> Myfunction(1、2)'を書くには、矢印関数を使って読みやすく慣用です。 –

1

あなたはそのような機能を備えた追加要素をラップすることができ、のがload_helpers

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

を偽およびそのようにそれを使用してみましょう:

var a = [] 

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

a[0]() // just execution 

すべては、あなたがバインディングでは、追加の引数、コンセプト

var a = [] 

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

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

の第二の証明を渡したいものをレベルによって異なります。

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 
関連する問題