如何避免在JavaScript应用程序中丢失"this"上下文?

Sea*_*ndo 6 javascript node.js promise lodash bluebird

以下是我的代码示例:

function QueueService() {
    var key = Config.get("AWS.accessKeyID");
    var secret = Config.get("AWS.secretKey");
    var credentials = new AWS.Credentials(key, secret, sessionToken = null);

    this._sqs = new Promise.promisifyAll(new AWS.SQS({apiVersion: '2012-11-05', region: "us-west-2", endpoint: "sqs.us-west-2.amazonaws.com", credentials: credentials}));
}

QueueService.prototype.FillBirdQueue = function(birds) {
    var self = this;

    birds.forEach(function(bird_batch) {
        var params = {
            Entries: bird_batch,
            QueueUrl: Config.get("AWS-Queue.Birds")
        };

        return self._sqs.sendMessageBatchAsync(params);
    });
};
Run Code Online (Sandbox Code Playgroud)

如果我省略var self = this;并调用return this._sqs.sendMessageBatchAsync(params);我得到一个错误,因为_.sqs未定义.它似乎this已经改变了,唯一的方法是保存它以供以后使用var self = this;.

我觉得有更好的方法来解决这个问题,但我并不完全确定如何使用这些工具.我目前正在使用Bluebird和Lodash,两者都支持绑定.在过去,我通过this在Bluebird中执行以下操作:

somethingAsync().bind(this).then(function(result){});
Run Code Online (Sandbox Code Playgroud)

我无法使用这种模式,因为我最初没有做任何异步.我只调用一个promise并且需要能够访问我在构造函数中定义的变量来执行此操作.

我忽略了什么......它能做什么?