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