node.js에서 콜백 매개 변수로 함수 실행 동기화

페인

저는 js (특히 node & express)를 배우고 있으며 현재 정확히 무엇이 동기화이고 무엇이 아닌지 파악하기 위해 고군분투하고 있습니다.

현재 B 형 서비스에 요청을 보내야하는 A 형 서비스를 예로 들어 보겠습니다. 모든 A 유형 서비스에서 사용할 수 있도록 이러한 요청을 공통 함수로 집계하고 싶었습니다.

A 형 서비스 코드 (router.post에서 직접)

var post_data = <some data>
sendBServicePost(post_data,function (out_data) {
    var resp_data = JSON.parse(out_data);
    if (resp_data.status == "OK") {
      var msg = 'Request OK : '+out_data;
      console.log(msg);
      res.json({ status:"OK", message:msg});
    }
    else
    {
      var msg = 'Login KO: '+out_data;
      console.log(msg);
      res.json({ status:"KO_FUNC", message:msg});
    }
  }).on('error',function (e) {
    var msg = 'Error with call: ' + e.message;
    console.log(msg);
    res.json({ status:"KO_TECH", message:msg});
  });

그리고 다음은 범인 함수의 코드입니다.

function sendBServicePost(post_data,callback) {
    var post_options = {
        // Some options
    };

    // Sending request
    var post_req = http.request(post_options, function(post_res) {
        post_res.on('data', function(out_data) {
          callback(out_data);
        });
    });
    post_req.write(post_data);
    post_req.end();
}

그래서 무슨 일이 일어나고 있는지는 응답이 이미 전송 된 상태에서 응답 헤더를 추가하려고한다는 오류가 발생하는 것인데, 이는 콜백 함수 코드에 도달하기 전에 A 유형 서비스의 실행이 완료 되었기 때문에 발생한다고 가정합니다. 콜백이 스택되고 실행이 전체 스택을 통과 할 것이라고 생각했기 때문에이 체인에서 정확히 비동기가 무엇인지 말하기가 어렵습니다.

누군가이 문제에 대해 밝힐 수 있습니까? 이 체인을 어떻게 동기화 할 수 있습니까? 여기에 몇 가지 모범 사례가 있습니까?

로간 프 신화

지금보고있는 핵심 문제는 'data'이벤트가 데이터 조각으로 여러 번 발생할 수 callback있으므로 res.json여러 번 호출하므로 여러 번 호출 하여 오류가 발생한다는 것입니다.

또한 node일반적으로 콜백을 전달하여 첫 번째 매개 변수를 오류로 사용하는 코드를 표준화 했으므로 다음을 권장합니다.

function sendBServicePost(post_data, callback) {
    var post_options = {
        // Some options
    };

    // Sending request
    var post_req = http.request(post_options, function(post_res) {
        var pieces = [];
        post_res.on('data', function(out_data) {
            pieces.push(out_data);
        });
        post_res.on('end' function(){
            callback(null, Buffer.concat(pieces));
        });
        post_res.on('error', function(err){
            callback(err, null);
        });
    });
    post_req.on('error', function(err){
        callback(err, null);
    });

    post_req.write(post_data);
    post_req.end();
}

다음과 같이 부름 :

var post_data = <some data>
sendBServicePost(post_data, function (err, out_data) {
    if (err){
        var msg = 'Error with call: ' + e.message;
        res.json({ status: "KO_TECH", message: msg});
        return;
    }

    var resp_data = JSON.parse(out_data);
    if (resp_data.status == "OK") {
        var msg = 'Request OK : ' + out_data;
        res.json({status: "OK", message: msg});
    } else {
        var msg = 'Login KO: ' + out_data;
        res.json({status: "KO_FUNC", message: msg});
    }
  });

실제로 더 많은 코드를 원하면 .on('error',항상에서 이벤트 이미 터 객체를 반환 할 수 sendBServicePost있지만 패러다임을 혼합하지 않도록 콜백을 이벤트 기반으로 재 작업하는 것이 좋습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Node js의 콜백 함수가 동기식으로 실행됩니까?

분류에서Dev

node.js 코드에서 콜백 매개 변수의 의미

분류에서Dev

JSDoc에서 콜백 함수의 매개 변수로 객체 배열 문서화

분류에서Dev

node.js 비동기 각 함수 콜백 실패

분류에서Dev

Node.js : 미들웨어 및 콜백 함수 실행 순서?

분류에서Dev

Node.JS Jasmine 테스트에서 함수 매개 변수 실행 실패

분류에서Dev

자바 스크립트, jQuery의 비동기 함수 체인에 대한 변수 콜백 매개 변수화

분류에서Dev

node.js에서 콜백 함수는 어떻게 실행됩니까?

분류에서Dev

VB 함수 콜백을 매개 변수로 .NET에 전달

분류에서Dev

Node.js-콜백을 사용하여 반복적으로 함수 실행

분류에서Dev

동적 배열을 Windows 콜백 함수에 대한 매개 변수로 사용할 수 있습니까?

분류에서Dev

Firebreath-콜백 함수에서 매개 변수 전달

분류에서Dev

자동 실행 가능 함수에 매개 변수로 jquery 전달

분류에서Dev

"콜백"이라는 getJSON GET 매개 변수에 대해 혼동

분류에서Dev

콜백 함수의 매개 변수 순서

분류에서Dev

수동으로 CRON 실행-매개 변수에 대해 혼동

분류에서Dev

C ++에서 매개 변수로 함수 실행

분류에서Dev

콜백으로 비동기 함수를 실행합니까?

분류에서Dev

콜백으로 비동기 함수를 실행합니까?

분류에서Dev

jade에서 js / node로 매개 변수 보내기

분류에서Dev

성공 콜백 함수로 $ .get에 전달 된 매개 변수에 액세스

분류에서Dev

내부 함수 값을 콜백에 매개 변수로 전달하는 방법

분류에서Dev

비동기 콜백 함수의 값을 반환하는 Node.JS 함수

분류에서Dev

비동기에 의해 호출 된 콜백 매개 변수에 액세스

분류에서Dev

(JavaScript) 다른 함수의 콜백에서 함수 실행

분류에서Dev

콜백 함수가 비동기 함수 내에서 실행되지 않는 이유는 무엇입니까?

분류에서Dev

Node.js : 백그라운드에서 함수 실행

분류에서Dev

node.js의 콜백 함수에서 result.insertId 가져 오기

분류에서Dev

콜백 함수는 Node.js를 발행합니다.

Related 관련 기사

  1. 1

    Node js의 콜백 함수가 동기식으로 실행됩니까?

  2. 2

    node.js 코드에서 콜백 매개 변수의 의미

  3. 3

    JSDoc에서 콜백 함수의 매개 변수로 객체 배열 문서화

  4. 4

    node.js 비동기 각 함수 콜백 실패

  5. 5

    Node.js : 미들웨어 및 콜백 함수 실행 순서?

  6. 6

    Node.JS Jasmine 테스트에서 함수 매개 변수 실행 실패

  7. 7

    자바 스크립트, jQuery의 비동기 함수 체인에 대한 변수 콜백 매개 변수화

  8. 8

    node.js에서 콜백 함수는 어떻게 실행됩니까?

  9. 9

    VB 함수 콜백을 매개 변수로 .NET에 전달

  10. 10

    Node.js-콜백을 사용하여 반복적으로 함수 실행

  11. 11

    동적 배열을 Windows 콜백 함수에 대한 매개 변수로 사용할 수 있습니까?

  12. 12

    Firebreath-콜백 함수에서 매개 변수 전달

  13. 13

    자동 실행 가능 함수에 매개 변수로 jquery 전달

  14. 14

    "콜백"이라는 getJSON GET 매개 변수에 대해 혼동

  15. 15

    콜백 함수의 매개 변수 순서

  16. 16

    수동으로 CRON 실행-매개 변수에 대해 혼동

  17. 17

    C ++에서 매개 변수로 함수 실행

  18. 18

    콜백으로 비동기 함수를 실행합니까?

  19. 19

    콜백으로 비동기 함수를 실행합니까?

  20. 20

    jade에서 js / node로 매개 변수 보내기

  21. 21

    성공 콜백 함수로 $ .get에 전달 된 매개 변수에 액세스

  22. 22

    내부 함수 값을 콜백에 매개 변수로 전달하는 방법

  23. 23

    비동기 콜백 함수의 값을 반환하는 Node.JS 함수

  24. 24

    비동기에 의해 호출 된 콜백 매개 변수에 액세스

  25. 25

    (JavaScript) 다른 함수의 콜백에서 함수 실행

  26. 26

    콜백 함수가 비동기 함수 내에서 실행되지 않는 이유는 무엇입니까?

  27. 27

    Node.js : 백그라운드에서 함수 실행

  28. 28

    node.js의 콜백 함수에서 result.insertId 가져 오기

  29. 29

    콜백 함수는 Node.js를 발행합니다.

뜨겁다태그

보관