У меня есть несколько вызовов к конечным точкам json, которые выглядят примерно так. Это в контексте компонента Vue, но на самом деле это не имеет большого значения. Все, что делают эти обработчики, это отображает сообщение начальной загрузки с успехом / ошибкой, все смарты находятся на сервере.
Так что это на самом деле не так уж и отличается от всех этих обработчиков console.log("it worked!")
, за исключением того, что моим обработчикам нужны дополнительные аргументы.
//The Vue component
let myVue = this;
axios.post(this.action_url, qs.stringify(data), config)
.then(function (response) {
// it's a bit more complicated as it looks at response contents
// for the actual message
myVue.$root.$emit(base_messages.EV_USER_MESSAGE, "success");
});
})
.catch(function (error) {
myVue.$root.$emit(base_messages.EV_USER_MESSAGE, "failure");
});
в другом месте ...
let myVue = this;
axios.post(another_url, qs.stringify(data2), config2)
.then(function (response) {
myVue.$root.$emit(base_messages.EV_USER_MESSAGE, "success");
});
.catch ....
})
Я бы хотел написать код ответа и обработчик ошибок один раз и использовать их повторно. Но, поскольку мне нужно что-то узнать из контекста выполнения, в данном случае myVue
, я не могу просто импортировать функцию и передать ответ, или я что-то упустил?
function handleResponse(response){
// ?? I need extra contextual variables, not just response
myVue.$root.$emit(base_messages.EV_USER_MESSAGE, "success");
};
, которыйЕсли бы это работало, я мог бы использовать как
axios.post(this.action_url, qs.stringify(data), config)
.then(handleResponse(response))
.catch(someErrorhandler(error));
вместо того, чтобы повторять замыкание с одинаковым содержимым каждый раз.
Исходя из Python, я думаю, может быть карри (предварительно присваивая аргумент вызову функции, в этом случае myVue
или {myVue: myVue}
) может это сделать, но каков идиоматический способ JS для достижения повторного использования обработчика, если обработчики идентичны? Все, что использует встроенный es6, предпочтительнее, чем добавление дополнительных зависимостей, таких как Lodash.