将问题与 Bluebird 承诺绑定
Bind issues with Bluebird promises
我在承诺和绑定方面遇到了一些困难。
我有 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
我随后添加了在 P.each(reports, main.buildInvoice.bind(main));
上找到的 bind
。但是,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);
};
这可能是一个与 promise 无关的问题,但我发帖时同时想知道我是否正确处理了这个流程。
一方面,您的调用 new Main({ connection: connection });
与您的构造函数不匹配:
function Main(connector) {
this.connector = connector;
}
它希望连接自己传递,而不是包装在对象中。因此,当为您传入的对象设置 .connector
时,它的 .findOrder
将是 undefined
。使用
var main = new Main(connection);
其次,您需要 bind 连接对象的 findOrder
方法,而不是 self
。哦,self
在 JS 中被称为 this
。并且没有要部分应用的 id
。所以使用
Main.prototype.buildInvoice = function(report) {
return P.map(ids, this.connector.findOrder.bind(this.connector));
};
我在承诺和绑定方面遇到了一些困难。
我有 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
我随后添加了在 P.each(reports, main.buildInvoice.bind(main));
上找到的 bind
。但是,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);
};
这可能是一个与 promise 无关的问题,但我发帖时同时想知道我是否正确处理了这个流程。
一方面,您的调用 new Main({ connection: connection });
与您的构造函数不匹配:
function Main(connector) {
this.connector = connector;
}
它希望连接自己传递,而不是包装在对象中。因此,当为您传入的对象设置 .connector
时,它的 .findOrder
将是 undefined
。使用
var main = new Main(connection);
其次,您需要 bind 连接对象的 findOrder
方法,而不是 self
。哦,self
在 JS 中被称为 this
。并且没有要部分应用的 id
。所以使用
Main.prototype.buildInvoice = function(report) {
return P.map(ids, this.connector.findOrder.bind(this.connector));
};