2015-02-03 6 views
1

약속 한대로 다음 작업 코드를 다시 작성하는 방법을 찾는 사람이 있습니까? 나는 삽입 쿼리를 실행 한 후 나는 다음과 같은 코드를 시도했지만 내가 console.log(b)에서 undefined납니다 socket.jsbluebird 약속 및 몽구스의 save()를 node.js에서 사용할 수 없습니다.

var func = require("functions") 
    var mongoose = require('mongoose'); 
    var mongo_models = require('./database/mongo_model')(mongoose); 
    var Promise = require("bluebird"); 

    socket.on("submit",function(d){ 
    if(d[0].src !== undefined) 
    { 
     var data = func.clear(sanitizer,d), 
     tab = new mongo_models.Tab({avg:0,post:data}); 
     tab.save(function(err,tw){ 
     io.sockets.in('index').emit("update",tw) 
     }) 
    } 
    }); 

를 통해 클라이언트에 데이터를 다시 보내려고합니다. 분명히 save()은 결과를 반환하지 않습니다. 약속 :

socket.on("submit",function(d){ 
    if(d[0].src !== undefined) 
    { 
    Promise.props({ 
     one: func.clear(sanitizer,d) 
    }).then(function(a){ 

     return new mongo_models.Tab({avg:0,post:a.one}).save(); 

    }).then(function(b){ 

     console.log(b); // undefined 
     io.sockets.in('index').emit("update",b) 

    }).catch(function (error) { 
     console.log(error); 
    }) 
    } 
    }); 
+0

는'.save인가를()는'반환하기로 무언가에 대한 약속? 그것은 몽구스에 의해 문서화되어 있습니까? – Esailija

답변

3

저장이 약속을 리턴하는 함수의 규칙에 예외 인 것으로 몽구스의 문제가있다.

var Promise = require("bluebird"); 
var func = require("functions") 
var mongoose = Promise.promisifyAll(require('mongoose')); 
var mongo_models = require('./database/mongo_model')(mongoose); 

하고 다음 비동기 호출을 반환 :

내가보기 엔 당신이 saveAsync 기능을 노출 블루 버드 사용 몽구스를 promisify하는 것이 좋습니다

//           Note the suffix 
    return new mongo_models.Tab({avg:0,post:a.one}).saveAsync(); 
관련 문제