节点猫鼬和 Q Promises
Node Mongoose and Q Promises
我正在努力思考 promises,并将一些嵌套回调重构为 promises。我遇到了一些我不明白的事情,任何人都可以提供的帮助将不胜感激。我的 for 循环肯定有问题;我想这种结构是无效的,但我不确定该怎么做。此外,从 insertTickersDb 函数返回的结果似乎采用了我的整个数组并将其作为单个记录插入——这不是我所希望的。我知道我做错了 - 请帮助我了解哪些事情。
我已经像这样将函数绑定到 mongoose:
var insertTickersDb = q.nfbind(db.tickers.insert.bind(db.tickers));
我有一个如下所示的插入函数:
function insertTickers(symbols) {
console.log("inserting tickers");
if (symbols) {
if (!(symbols instanceof Array)) {
symbols = [symbols];
}
var tickersToInsert = [];
symbols.map(function(symbol) {
tickersToInsert.push({
symbol: symbol
});
});
console.log("tickersToInsert = " + JSON.stringify(tickersToInsert));
return insertTickersDb(tickersToInsert);
}
}
我有这样的测试:
describe("tickerIntegrationTests internal testing tools", function() {
it("insertTickers should insert the provided tickers", function(done) {
var tickerList = ["A", "B", "C"];
insertTickers(tickerList).then(function(data) {
console.log("inside insertTickers, data = " + JSON.stringify(data));
for (var d = 0; d < data.length; d++) {
console.log("d = " + d + ",data[d].symbol = " + data[d].symbol);
assert.equal(data[d].symbol, tickerList[d]);
}
}).then(removeTickers(tickerList)).done(function(){done();});
});
});
我的输出是:
tickerIntegrationTests internal testing tools
inserting tickers
tickersToInsert = [{"symbol":"A"},{"symbol":"B"},{"symbol":"C"}]
inside insertTickers, data = [[{"symbol":"A","_id":"552faf5c0aac9578428320da"},{"symbol":"B","_id":"552faf5c0aac9578428320db"},{"symbol":"C","_id":"552faf5c0aac9578428320dc"}],{"n":0}]
d = 0,data[d].symbol = undefined
扩展内部调用的 json 可能会有所帮助
[
[
{
"symbol": "A",
"_id": "552faf5c0aac9578428320da"
},
{
"symbol": "B",
"_id": "552faf5c0aac9578428320db"
},
{
"symbol": "C",
"_id": "552faf5c0aac9578428320dc"
}
],
{
"n": 0
}
]
现在您可以看到数据是一个数组,其第一个元素是您期望的数据数组。如果您查看 data[0]
,您会找到第一个自动收报机。 d[0].symbol
应该包含您要查找的内容。你可能想看看 t
我正在努力思考 promises,并将一些嵌套回调重构为 promises。我遇到了一些我不明白的事情,任何人都可以提供的帮助将不胜感激。我的 for 循环肯定有问题;我想这种结构是无效的,但我不确定该怎么做。此外,从 insertTickersDb 函数返回的结果似乎采用了我的整个数组并将其作为单个记录插入——这不是我所希望的。我知道我做错了 - 请帮助我了解哪些事情。
我已经像这样将函数绑定到 mongoose:
var insertTickersDb = q.nfbind(db.tickers.insert.bind(db.tickers));
我有一个如下所示的插入函数:
function insertTickers(symbols) {
console.log("inserting tickers");
if (symbols) {
if (!(symbols instanceof Array)) {
symbols = [symbols];
}
var tickersToInsert = [];
symbols.map(function(symbol) {
tickersToInsert.push({
symbol: symbol
});
});
console.log("tickersToInsert = " + JSON.stringify(tickersToInsert));
return insertTickersDb(tickersToInsert);
}
}
我有这样的测试:
describe("tickerIntegrationTests internal testing tools", function() {
it("insertTickers should insert the provided tickers", function(done) {
var tickerList = ["A", "B", "C"];
insertTickers(tickerList).then(function(data) {
console.log("inside insertTickers, data = " + JSON.stringify(data));
for (var d = 0; d < data.length; d++) {
console.log("d = " + d + ",data[d].symbol = " + data[d].symbol);
assert.equal(data[d].symbol, tickerList[d]);
}
}).then(removeTickers(tickerList)).done(function(){done();});
});
});
我的输出是:
tickerIntegrationTests internal testing tools
inserting tickers
tickersToInsert = [{"symbol":"A"},{"symbol":"B"},{"symbol":"C"}]
inside insertTickers, data = [[{"symbol":"A","_id":"552faf5c0aac9578428320da"},{"symbol":"B","_id":"552faf5c0aac9578428320db"},{"symbol":"C","_id":"552faf5c0aac9578428320dc"}],{"n":0}]
d = 0,data[d].symbol = undefined
扩展内部调用的 json 可能会有所帮助
[
[
{
"symbol": "A",
"_id": "552faf5c0aac9578428320da"
},
{
"symbol": "B",
"_id": "552faf5c0aac9578428320db"
},
{
"symbol": "C",
"_id": "552faf5c0aac9578428320dc"
}
],
{
"n": 0
}
]
现在您可以看到数据是一个数组,其第一个元素是您期望的数据数组。如果您查看 data[0]
,您会找到第一个自动收报机。 d[0].symbol
应该包含您要查找的内容。你可能想看看 t