如何在 Promise.map 中访问 'this'?
How do I access 'this' inside of Promise.map?
我们知道,下面的this
指的是window
对象。我想知道的是如何在不诉诸 var self=this;
技巧的情况下传递我的 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。
编辑:修正了一个拼写错误。
你可以使用 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);
});
};
如果在 promise 链的延续中不需要外部上下文,我不确定它比 "resorting to the var self=this;
trick" 好多少。
当然,如果你使用的是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);
绑定的是 promise,不是 map 回调,试试 }.bind(this));
然而,这只是 var self = this;
的 ES5 约定
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));
};
我们知道,下面的this
指的是window
对象。我想知道的是如何在不诉诸 var self=this;
技巧的情况下传递我的 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。
编辑:修正了一个拼写错误。
你可以使用 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);
});
};
如果在 promise 链的延续中不需要外部上下文,我不确定它比 "resorting to the var self=this;
trick" 好多少。
当然,如果你使用的是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);
绑定的是 promise,不是 map 回调,试试 }.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));
};