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
函数vs
var 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));
};