У меня возникают проблемы с тем, что функции ES6 Arrow работают правильно с моей цепочкой обещаний Bookshelf/Bluebird.Использование/привязка «это» с обещаниями к книжной полке в ES6
Это рабочий код при использовании ES5 и Bluebird-х .bind({})
:
exports.prospectorLead = function (query) {
return new Lead().where('id', query.lead_id).fetch({withRelated: Lead.RELATED, require: true })
.bind({})
.then(function (lead) {
this.lead = lead.serialize();
this.company = this.lead.company.serialize();
return API('prospector', 'v1/people/search', {
query: query.domain,
});
})
.then(function (prospects) {
console.log(this.lead.id, this.company.domain, prospects);
})
}
Это сломанный код при использовании функции ES6 со стрелками, которые не имеют this
установлены правильно:
exports.prospectorLead = function (query) {
return new Lead().where('id', query.lead_id).fetch({withRelated: Lead.RELATED, require: true })
.then((lead) => {
this.lead = lead.serialize();
this.company = this.lead.company.serialize();
return API('prospector', 'v1/people/search', {
query: query.domain
});
})
.then((prospects) => {
console.log(this.lead.id, this.company.domain, prospects);
})
}
Проблема Я вижу, что область действия this
установлена не на функцию exports.propspectorLead()
, а на объем всего модуля. Что не было проблемой при вызове функции один, но когда я делаю тонну асинхронных вызовов этой функции, мои данные становятся коррумпированными, потому что this
не имеет правильной области.
Что мне здесь не хватает? Я был в предположении, что использование функций стрелок позволит мне использовать this
всю свою цепочку обещаний.
Обратите внимание, что для реальной проблемы, которую вы пытаетесь решить с помощью 'bind', есть [гораздо лучшие решения] (http://stackoverflow.com/q/28250680/1048572). – Bergi