Javascript 节点Mongoose与Q承诺

Javascript 节点Mongoose与Q承诺,javascript,node.js,promise,q,node-mongodb-native,Javascript,Node.js,Promise,Q,Node Mongodb Native,我正试图将我的大脑围绕承诺,并将一些嵌套回调重构为承诺。我遇到了一些我不理解的事情,任何人能提供的任何帮助都将不胜感激。我的for循环肯定有问题;我想那种结构是无效的,但我不知道该怎么办。另外,insertTickersDb函数返回的结果似乎将我的整个数组作为一条记录插入,而不是我所希望的。我知道我做错了-请帮助我了解哪些事情 我将一个函数绑定到mongoose,如下所示: var insertTickersDb = q.nfbind(db.tickers.insert.bind(db.tick

我正试图将我的大脑围绕承诺,并将一些嵌套回调重构为承诺。我遇到了一些我不理解的事情,任何人能提供的任何帮助都将不胜感激。我的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();});
    });
});
我有一个插入函数,如下所示:

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();});
    });
});
我有一个这样的测试:

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

如果扩展内部调用的json,可能会有所帮助

[
  [
    {
      "symbol": "A",
      "_id": "552faf5c0aac9578428320da"
    },
    {
      "symbol": "B",
      "_id": "552faf5c0aac9578428320db"
    },
    {
      "symbol": "C",
      "_id": "552faf5c0aac9578428320dc"
    }
  ],
  {
    "n": 0
  }
]

现在您可以看到数据是一个数组,其第一个元素是您所期望的数据数组。如果您查看
数据[0]
,您将找到第一个股票代码<代码>d[0]。符号应包含您要查找的内容。你可能想看看t

是的。我把这个答案标为正确答案。我确实意识到了您所描述的,但是行为似乎与回调模型不同——我想我只是在期待一些我不应该看到的东西。谢谢你的帮助。