我如何避免失去';这';JavaScript应用程序中的上下文?
以下是我的代码示例:我如何避免失去';这';JavaScript应用程序中的上下文?,javascript,node.js,promise,lodash,bluebird,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
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);
});
};
如果我省略var self=this
并调用返回此参数。_sqs.sendMessageBatchAsync(params)
我收到一个错误,因为..sqs
未定义。似乎此
已更改,唯一的解决方法是使用var self=this将其保存以备将来使用代码>
我觉得有更好的方法来解决这个问题,但我不完全确定如何使用我可以使用的工具。我目前正在使用Bluebird和Lodash,它们都支持绑定。在过去,我通过在Bluebird中执行以下命令来传递此
:
somethingAsync().bind(this).then(function(result){});
我无法使用此模式,因为我一开始没有做任何异步操作。我只调用一个promise,需要能够访问我在构造函数中定义的变量才能这样做
我忽略了一些东西。它可能是什么?使用第二个参数forEach
可能是最干净的方法。请参阅。您可以使用bind
,但您的操作方式没有问题。必须重新输入您的代码。。。我一直认为你的意思是这个的值在foreach
循环之前和之后是不同的,而不是在:)更好的问题是:为什么从foreach
回调返回承诺?你到底打算用它们做什么?你为什么要做新的承诺。承诺?