2013-08-11 5 views
2

노드를 시작하고 비동기 동작에 익숙해 지려고하는데 뷰를 렌더링 할 때 값을 할당하는 데 문제가 있습니다.비동기 적으로 뷰에 값을 할당합니다.

사용자 정의 모듈 : 경로에

var fs = require('fs') 

exports.drawCard = function (color, callback) { 
    fs.readFile(color, 'utf-8', function(err, data) { 
    if (err) { callback(err); return } 
    var card = sample(data.split(/\n/)) 
    callback(err, card) 
    }) 
} 

가 파일 : 코드베이스는 매우 간단합니다

exports.index = function(req, res){ 
    var deck = require('./../deck.js') 

    console.log(newCard) 
    res.render('index', { 
    title: 'Bits AH', 
    //This is what I would like 
    card: deck.drawCard("green") 
    }) 
}; 

내가 그건 당신이 변수를 할당하는 방법 아니라는 것을 알고 있지만입니다 나는 총격을 가하고있다. 나는이 단순한 과제를 수행하는 코드/노드 방법을 이해할 수 없다.

답변

2

이것은 무엇일까요? 당신은 함수가 완료 될 때까지 반환 할 수 없기 때문에

exports.index = function(req, res){ 
    var deck = require('./../deck'); // No .js required 

    deck.drawCard(function(err, card) { 
    if(err) { 
     res.render('error'); 
     return; 
    } 

    res.render('index', { 
     title: 'Bits AH', 
     card: card 
    }); 
    }); 
}; 

당신은 drawCard 함수에 대한 콜백 내부의 res.render 호출을 포장하고 있습니다. 그러나 모듈을 초기화 할 때 해당 파일을로드 한 다음 drawCard 함수를 동기식으로 변환 한 다음 예제와 같이 사용할 수 있습니다.

관련 문제