Вот пример моего кода:
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;
и вызываю return this._sqs.sendMessageBatchAsync(params);
, я получаю сообщение об ошибке, потому что _.sqs
не определено. Похоже, что this
изменился, и единственный способ обойти это — сохранить его для последующего использования с помощью var self = this;
.
Я чувствую, что есть лучший способ сделать это, но я не совсем уверен, как использовать имеющиеся в моем распоряжении инструменты. В настоящее время я использую Bluebird и Lodash, оба из которых поддерживают привязку. В прошлом я прошел this
, выполнив в Bluebird следующее:
somethingAsync().bind(this).then(function(result){});
Я не смог использовать этот шаблон, потому что сначала я ничего не делаю асинхронно. Я вызываю только одно обещание, и для этого мне нужно иметь доступ к переменной, которую я определил в своем конструкторе.
Я что-то упускаю.. что это может быть?
forEach
, вероятно, самый чистый способ сделать это. См. Как передать контекст анонимной функции forEach(). - person Qantas 94 Heavy   schedule 28.04.2015bind
, но в том, как вы это делаете, нет ничего плохого. - person adeneo   schedule 28.04.2015this
было разным до и после циклаforeach
, а не во время :) - person James Thorpe   schedule 28.04.2015return
обещаетеforEach
обратного вызова? Что вы на самом деле собирались с ними делать? - person Bergi   schedule 28.04.2015new Promise.promsiifyAll
-_-? - person Benjamin Gruenbaum   schedule 28.04.2015Promise.each
илиPromise.map
вместоforEach
? - person Benjamin Gruenbaum   schedule 28.04.2015new Promise.promisfyAll
- person Sean Lindo   schedule 28.04.2015