如何访问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)); };