В браузере я пытаюсь использовать ES6-обещание и ES6-выборку с действиями Reflux.js, но у меня возникли проблемы с привязкой контекста «this» в рамках анонимной функции стрелок. Что я делаю не так?Es6 Fetch/Promise Context
* Update * Я использую Reflux.js ListenAndPromise, я, вероятно, следовало бы добавить это в моем Orignal вопрос
* Обновление *
Got контекст работает, когда я удалить внешняя стрелка функция Это работает:
CrewActions.fetchCrew.listenAndPromise(function() {
fetch('crew.json')
.then(function() {
console.log(this); // This is bound as expected
}.bind(this))
});
Но это не работает
CrewActions.fetchCrew.listenAndPromise(function() {
fetch('crew.json')
.then(() => {
console.log(this); // undefined
})
});
Так что я думаю, я ошибаюсь о том, как стрелка функции работают? Я думал, что они связаны этим контекстом?
Ни один из приведенных ниже примеров не работает.
Пример.
CrewActions.fetchCrew.listenAndPromise(() => {
console.log(this)
// functor() {
// var triggerType = functor.sync ? "trigger" : "triggerAsync";
// return functor[triggerType].apply(functor, arguments);
// }
fetch('crew.json')
.then(_.bind(() => {
console.log(this) // undefined
}, this))
fetch('crew.json')
.then(() => console.log(this)); // undefined
fetch('crew.json')
.then(function() {
console.log(this) // undefined
});
fetch('crew.json')
.then(function() {
console.log(this) // undefined
}.bind(this));
});
В первом случае вы не можете привязывать функции стрелок. В остальном, что такое «это» определяется как в первую очередь? Последний пример должен работать, попробуйте . Then (function() {console.log (this)}. Bind ({jellybeans: true})), и он должен регистрировать объект jellybeans. – Dtipson
узел или браузер? пожалуйста, предоставьте [mcve] –
эти вызовы, сделанные в глобальном контексте или внутри экземпляра объекта? – Icepickle