如何访问Promise.map中的“this”?
我们知道,下面的this
指的是window
对象。 我想知道的是,我如何能够通过我的this
背景而不诉诸于var self=this;
招。 有任何想法吗? 我尝试将.bind()添加到第9行的末尾,以便读取}).bind(this);
但是这也不起作用。
有任何想法吗?
QueueService.prototype.FillCompanyQueue = function(companies) { return Promise.map(companies, function (company_batch) { var params = { Entries: company_batch, QueueUrl: Config.get("AWS-Queue.Company") }; return this._sqs.sendMessageBatchAsync(params); }); };
编辑:我标记它,但应该提到,我使用蓝鸟。
编辑:修正了一个错字。
你可以使用蓝鸟的绑定function :
QueueService.prototype.FillCompanyQueue = function(companies) { return Promise.resolve(companies).bind(this).map(function(company_batch) { var params = { Entries: company_batch, QueueUrl: Config.get("AWS-Queue.Company") }; return this._sqs.sendMessageBatchAsync(params); }); };
如果你在承诺链的延续中不需要外部环境,我不确定它比“诉诸于var self=this;
技巧”要好得多。
当然,如果你使用ES6,你也可以简单地使用箭头函数:
QueueService.prototype.FillCompanyQueue = function(companies) { return Promise.map(companies, (company_batch) => { var params = { Entries: company_batch, QueueUrl: Config.get("AWS-Queue.Company") }; return this._sqs.sendMessageBatchAsync(params); }); };
}).bind(this);
是绑定诺言,而不是地图callback,尝试}.bind(this));
然而,这只是一个ESET约定var self = this;
QueueService.prototype.FillCompanyQueue = function(companies) { return Promise.map(companies, function (company_batch) { var params = { Entries: company_batch, QueueUrl: Config.get("AWS-Queue.Company") }; return this._sqs.sendMessageBatchAsync(params); }.bind(this)); };