2016-11-25 17 views
25

Tôi có hàm callWithMagic nhận hàm gọi lại làm tham số và gọi hàm đó bằng một đối số.Vượt qua một đối số bổ sung cho hàm gọi lại

const callWithMagic = callback => { 
    const magic = getMagic(); 
    callback(magic); 
}; 

Tôi cũng có một chức năng processMagic mà hai đối số: magictheAnswer.

const processMagic = (magic, theAnswer) => { 
    someOtherMagic(); 
}; 

Tôi muốn vượt qua chức năng processMagic như một cuộc tranh cãi để callWithMagic, nhưng tôi cũng muốn vượt qua 42 như tham số thứ hai (theAnswer) để processMagic. Làm thế nào tôi có thể làm điều đó?

callWithMagic(<what should I put here?>); 
+0

Nếu bạn muốn xem một câu trả lời thấu đáo hơn nhiều, thấy câu hỏi này và câu trả lời, đó là hai tuổi: http: // stackoverflow.com/questions/21985201/pass-extra-parameters-to-jquery-ajax-promise-callback – JotaBe

Trả lời

28

Chỉ cần tạo một callback wrapper:

callWithMagic(function(magic) { 
    return processMagic(magic, 42); 
}); 

Hoặc sử dụng ECMAScript :

callWithMagic(magic => processMagic(magic, 42)); 
+0

Cảm ơn, thats 'work'! Nhưng chỉ lần đầu tiên marketEvent được gọi. Các cuộc gọi tiếp theo trả về undefined cho giá trị newArg, nhưng không trả về cho hai giá trị khác. – Kulin

+0

@Kulin Điều này sẽ hoạt động mọi lúc. Bạn có làm cho nó hoạt động khi bạn đánh dấu nó là câu trả lời không? – str

+0

Bài đăng này đang được thảo luận trên Meta - http://meta.stackoverflow.com/q/338481 (xem nhận xét cho câu hỏi). Đồng thời thông báo cho người hỏi, @Kulin. – duplode

1

Bạn có thể sử dụng một chức năng Anonymus

cái gì đó như

session.sub('Hello', function(){marketEvents(your args);}); 
+0

Đây là câu trả lời hay nhất, cảm ơn bạn! Cũng có thể được sử dụng với (các) đối số trên hàm(), ví dụ: session.sub ('Hello', function (orgArg) {marketEvents (orgArg, your_args);}); – gregko

1

Bạn có thể tạo hàm gọi hàm marketEvent. Không cần phải làm phức tạp mọi thứ

session.sub('Hello', function(args, kwargs) { 
    marketEvent(args, kwargs, 'my custom data'); 
}); 

nếu không bạn có thể làm điều này:

var mrktEvent = function(customArgs) { 
    return function(args, kwargs) { 
     marketEvent(args, kwargs, customArgs) 
    }; 
} 

session.sub('Hello', mrktEvent("customEvent")); 
Các vấn đề liên quan