Javascript 如何访问';这';在Promise.map的内部?
正如我们所知,Javascript 如何访问';这';在Promise.map的内部?,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,正如我们所知,下面的这个指的是窗口对象。我想知道的是,我如何在不诉诸var self=this的情况下传递我的this上下文技巧。有什么想法吗?我尝试将.bind()添加到第9行的末尾,使其读作}.bind(这个)但这也不起作用 有什么想法吗 QueueService.prototype.FillCompanyQueue = function(companies) { return Promise.map(companies, function (company_batch) {
下面的这个
指的是窗口
对象。我想知道的是,我如何在不诉诸var self=this的情况下传递我的this
上下文代码>技巧。有什么想法吗?我尝试将.bind()添加到第9行的末尾,使其读作}.bind(这个)代码>但这也不起作用
有什么想法吗
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);
});
};
编辑:我给它加了标签,但应该提到我使用的是蓝鸟
编辑:修正了一个打字错误 您可以使用:
如果在承诺链的延续中不需要外部的上下文,我不确定这比“诉诸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))代码>
然而,这只是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));
};
根据网络上的几个基准测试,使用var=this
技巧实际上要快得令人难以置信。@doogle这些基准测试真的是指蓝鸟吗?链接?不,它们指的是本机bind
函数vsvar self=this的用法代码>@doogle所以它们不相关,是吗?@sean这里有一个原生绑定与self的基准=这只蓝鸟有一个绑定函数:
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));
};