2015-04-16 2 views
0

Я пытаюсь обернуть мозг вокруг обещаний, и я реорганизую некоторые вложенные обратные вызовы в обещания. Я сталкиваюсь с чем-то, чего не понимаю, и любая помощь, которую кто-либо может предоставить, будет оценена по достоинству. Там определенно что-то не так с моим for-loop; Я полагаю, что такая структура недействительна, но я не уверен, что с ней делать. Кроме того, результат, возвращаемый функцией insertTickersDb, кажется, забирает весь мой массив и вставляет его как одну запись, а не то, на что я надеялся. Я знаю, что делаю неправильно - пожалуйста, помогите мне понять, что именно.Узел Mongoose и Q Promises

Я вразумлял функцию 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 

ответ

0

Это может помочь, если вы расширяете вне JSON внутреннего вызова

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

Теперь вы можете увидеть данные, представляет собой массив, первый элемент массива данных вы ожидаете. Если вы посмотрели data[0], вы найдете первый тикер. d[0].symbol должен содержать то, что вы ищете. Вы можете посмотреть на t

+0

Да. Я назвал этот ответ правильным. Я понял, что вы описали, но поведение кажется другим, чем с моделью обратного вызова - я думаю, я просто ожидал чего-то, чего я не должен. Спасибо за вашу помощь. –

Смежные вопросы