gpt4 book ai didi

javascript - 将问题与 Bluebird promise 绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 09:20:57 25 4
gpt4 key购买 nike

我在 promise 和绑定(bind)方面遇到一些困难。

我有两个类:

// 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));

我遇到了绑定(bind)问题。我首先在上面的行中收到此错误:

Unhandled rejection TypeError: undefined is not a function

我随后添加了在 P.each(reports, main.buildInvoice.bind(main)); 上找到的 bind。然而, buildInvoice 方法也出现了同样的问题,但我还没有弄清楚语法。发布的代码产生无法读取未定义的属性“bind”

进行此调用的正确语法是什么:

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));
};

关于javascript - 将问题与 Bluebird promise 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31838822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com