如我们所知,下面的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);
});
};
编辑:我标记了它,但应该提到我正在使用Bluebird。
编辑:修正了一个拼写错误。
答案 0 :(得分:5)
您可以使用Bluebird's bind 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;
技巧更好?" #34;
当然,如果你正在使用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);
});
};
答案 1 :(得分:0)
}).bind(this);
绑定了承诺,而不是地图回调,请尝试}.bind(this));
然而,这只是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));
};