我在承诺和绑定方面遇到了一些困难。
我有2个分支:
// A Model/DB connnection of sorts
function Connection() {
}
Connection.prototype.findOrder = function(id) {
// Returns promise
}
// The main class
function Main(connector) {
this.connector = connector;
}
Main.prototype.buildInvoice = function(report) {
return P.map(ids, self.connector.findOrder.bind(self, id);
// Yields: Cannot read property 'bind' of undefined
};
这样称呼:
var connection = new Connection({
connection: config.db.mongo.connection
});
var main = new Main({ connection: connection });
P.each(reports, main.buildInvoice.bind(main));
我遇到了绑定问题。我第一次收到上述行的错误:
Unhandled rejection TypeError: undefined is not a function
我随后添加了bind
上找到的P.each(reports, main.buildInvoice.bind(main));
。然而,buildInvoice方法出现了同样的问题,但我还没有设法弄清楚语法。发布的代码会产生Cannot read property 'bind' of undefined
进行此调用的正确语法是什么:
Main.prototype.buildInvoice = function(report) {
var self = this;
return P.map(ids, self.connector.findOrder.bind(self, id);
};
这可能是一个非承诺相关的问题,但我发布的是这样,因为我同时想知道我是否正确处理此流程。
答案 0 :(得分:1)
首先,您的通话new Main({ connection: connection });
与您的构造函数不匹配:
function Main(connector) {
this.connector = connector;
}
期望连接自己传递,而不是包装在对象中。因此,在为您传入的对象设置.connector
时,其.findOrder
将为undefined
。使用
var main = new Main(connection);
其次,您需要bind findOrder
方法连接对象,而不是self
。哦,JS中self
被称为this
。而且你想要部分申请id
。所以使用
Main.prototype.buildInvoice = function(report) {
return P.map(ids, this.connector.findOrder.bind(this.connector));
};