2014-12-24 3 views
1

Q, 라이브러리 공동 작업을 복원하는 방법을 어떻게 도와 줄 수 있습니까?Nodejs에서 rest-with Q-lib를 사용하는 방법

이것은 내가 교환하고 싶은 것입니다. Q를 사용하지 마십시오. 그냥 다시 작성하십시오.

var deffered = Q.defer(); 

    client.get('/pension/woori_m.asp?pension_code=w0101200', function (err, req) { 
    assert.ifError(err); 

    req.on('result', function (err, res) { 
     assert.ifError(err); 

     res.body = ''; 
     res.on('data', function (chunk) { 
     res.body += euckr2utf8.convert(chunk); 
     console.log(res.body); 
     }); 

     res.on('end', function() { 
     deffered.resolve(res.body); 
     }); 
    }); 
    }); 

이것은 내가 다음 두 가지

function requestTo(path) { 
    var deffered = Q.defer(); 
    client.get(path, function (err, req) { 
     if (err) { 
     deffered.reject(new Error(err)); 
     } 
     deffered.resolve(req); 
    }); 
    } 

    function getResult(request) { 
    var deffered = Q.defer(); 
    request.on('result', function (err, res) { 
     deffered.resolve(res); 
    }); 
    } 

    function getData(response) { 
    var deffered = Q.defer(); 
    response.body = ''; 
    response.on('data', function (chunk) { 
     response.body += euckr2utf8.convert(chunk); 
     deffered.resolve(response.body); 
    }); 
    } 

이 큐션 코드와 코드를 변경하는 것이다.

requestTo('/pension/woori_m.asp?pension_code=w0101200') 
    .then(function(request) { 
     return getResult(request); 
    }) 
    .then(function(result) { 
     getResult(result); 
    }) 
    .then(function(response) { 
     getData(response); 
    }) 
    .then(function(data) { 
     deffered.resolve(data); 
    }); 

그리고 이것은 디버깅 할 때 발생합니다. 어떻게이 방법을 사용할 수 있습니까?

> debugger listening on port 55083 
> 
> /Users/tourdoc/PhpstormProjects/untitled1/app/test.js:56 
>  .then(function(request) { 
> ^TypeError: Cannot call method 'then' of undefined 
>  at getChunks (/Users/tourdoc/PhpstormProjects/untitled1/app/test.js:56:6) 
>  at Object.<anonymous> (/Users/tourdoc/PhpstormProjects/untitled1/app/test.js:101:1) 
>  at Module._compile (module.js:456:26) 
>  at Object.Module._extensions..js (module.js:474:10) 
>  at Module.load (module.js:356:32) 
>  at Function.Module._load (module.js:312:12) 
>  at Module.runMain [as _onTimeout] (module.js:497:10) 
>  at Timer.listOnTimeout [as ontimeout] (timers.js:112:15) 
> 
> Process finished with exit code 8 
+0

'지연됨'을 반환하지 않습니다. –

+0

이 코드를 모든 함수에 삽입합니다 (deffered.promise; return). 그러나 같은 문제들 – user3077593

답변

0

나는 코드를 실행하고 같은 오류가 발생합니다 :

/tmp/test.js:37 
    .then(function(request) { 
    ^
TypeError: Cannot call method 'then' of undefined 
    at Object.<anonymous> (/tmp/test.js:37:6) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:902:3 

은 그 때 나는 requestTo, getResultgetData 기능의 끝에 return deffered.promise;를 추가하고이 잘 작동합니다. 따라서 어떤 return도 놓치지 마세요. 괜찮습니다.

관련 문제