javascript - 如何访问 Promise.map 中的 'this'?

标签 javascript node.js promise bluebird

我们知道,下面的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 链的延续中不需要外部上下文,我不确定它是否比“求助于 var self=this; 技巧”好多少。

当然,如果你使用的是 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);
    });
};

关于javascript - 如何访问 Promise.map 中的 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973738/

相关文章:

javascript - 无法在 node-ftp 模块中取消 Node 化方法

javascript - 尝试为类似 RxJS 的结构开发 "pull mode"会出现 RangeError

javascript - 如何在 createElement 输入上设置与先前输入相同的字体大小? [Javascript]

node.js - Mongoose for var in loop 在子文档中

node.js - Keystone.js 管理 UI - 表单中没有字段

node.js - 在同一个子进程中同时使用 stdio 和 stout

javascript - 这两种语法有什么区别

javascript - 如何使用 Promise 编写我的函数

javascript - 如何从 div 元素的 ID 获取 Leaflet map 的 map 对象?

javascript - 如何将 Javascript 函数转换为 JQuery