2015-08-10 1 views
0

Или, возможно, я делаю это неправильно, на самом деле, скорее всего, я делаю это неправильно.Мангустское обещание встроено, но теперь работает?

У вас есть таблица, содержащая «дерево» навыка, начиная с уровня корня и может быть до десяти уровней (только две до сих пор), но я хочу вернуть его как одну большую структуру JSON, поэтому Я хочу спросить базу данных для каждого набора данных, построить мою структуру, а затем запросить следующий уровень.

Конечно, если я просто отправлю свои запросы с помощью мангуста, они вернутся в любое время, так как все они приятные асинхронные звонки. Обычно хорошие вещи.

Глядя на документацию для Mongoose (с использованием 4.1.1), похоже, что у нее есть обещание, но всякий раз, когда я пытаюсь ее использовать, вызов api вызывает шипение, и я получаю 500 обратно.

Вот моя простая функция:

exports.getSkills = function(req,res) { 
    console.log("Will return tree of all skills"); 
    for (var i = 0; i<10; i++){ 
     var returnData = []; 
     console.log("Lets get level " + i); 
     var query = Skill.find({level: i });//The query function 
     var promise = query.exec; //The promise? 
     promise.then(function(doc) { //Totally blows up at this point 
      console.log("Something came back") 
      return "OK"; 
     }); 
    } 

}

документация Mongoose по этому вопросу можно найти здесь http://mongoosejs.com/docs/api.html#promise_Promise

Любые предложения?

+0

+1 для использования * "Hissy приступа" * в вопросе. Но серьезно это кажется изученным. ** Но ** Вы также понимаете, что у вас есть синхронная конструкция (для цикла), взаимодействующая с асинхронными ответами (ваши обещания), которые, конечно же, не «хорошо сочетаются». Это то, что, как мне кажется, вам действительно нужно здесь решить, поскольку «взорвать» действительно является подходящей фразой, когда вы пытаетесь сделать что-то подобное. –

+0

Мой план состоял в том, чтобы использовать обещание заставить moongose ​​играть как синхронный. И.Е. Я хочу, чтобы он запускал запросы на уровень, дождался ответа, а затем обработал следующий. Обещание может быть неправильным, но я не могу понять правильный путь :) Подумайте об этом, я обнаружил, что довольно часто мне нужен шаблон дизайна для этого и на самом деле не нашел гладкого решения (отчаянно хотят избежать попадания в пирамиду гибели). – vrghost

+0

Umpph! Какая часть аргумента «callback» для '.then()' вы не понимаете тогда? –

ответ

1
var promise = query.exec; 
// => 
var promise = query.exec() 

exports.getSkills = function(req,res) { 
    console.log("Will return tree of all skills"); 
    var p; 
    for (var i = 0; i < 10; i ++) { 
     if (i == 0) { 
      p = Skill.find({level:i}).exec(); 
     } else { 
      p.then(function(){ 
       return Skill.find({level:i}).exec() 
      }) 
     } 
     p.then(function (data) { 
      //deal with your data 
     }) 
    } 
    p.then(function() { 
     // deal with response 
    }) 
} 
Смежные вопросы