Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何避免失去';这';JavaScript应用程序中的上下文?_Javascript_Node.js_Promise_Lodash_Bluebird - Fatal编程技术网

我如何避免失去';这';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
回调返回
承诺?你到底打算用它们做什么?你为什么要做新的承诺。承诺?