2017-12-06 12 views
0

두 함수 funcAfuncB이 있습니다. funcAfuncB으로 전화하고 은 콜백을 전달합니다. funcA에서 콜백 (cb)은 잘 정의되어 있지만 funcBundefined이됩니다. 여기 함수 매개 변수로 전달 된 후 콜백이 null이됩니다.

코드입니다 :

MyClass.prototype.funcA= function (a) { 
    return new Promise((resolve, reject) => { 
     let cb = (reading) => { 
      console.log("Will resolve:" + reading); 
      resolve(funcC(reading)); 
     }; 

     if (cb) 
      console.log("cb ok"); 
     else 
      console.log("cb ko"); 

     this.funcB(a, cb); 
    }); 
} 

MyClass.prototype.funcB= function (a, callback, c) { 
    console.log("funcB"); 
    console.log("callback: " + callback); 
    this.device.send(a, response => { 
     console.log("CB ?"); 
     if (callback) { 
      console.log("CB !"); 
      callback(response); 
     } 
     else { 
      console.log("no callback"); 
      console.log(callback); 
     } 
    }); 

    if (c) { 
     funcB([0x00, 0x00]); 
    } 
}; 

그리고 여기에 콘솔 출력입니다 : 코드베이스에서 나는 funcBfuncB 성공적으로 콜백을 호출 호출 다른 기능을 가지고

cb ok 
funcB 
callback: (reading) => { 
      console.log("Will resolve:" + reading); 
      resolve(funcC(reading)); 
     } 
CB ? 
no callback 
undefined 

참고.

+0

'if (c)'의 코드는 무엇입니까? 어쩌면'callback'을 무언가로 설정했을까요? @Bergi'c'가 false로 평가되면 [if (c)]의 코드가 결코 실행되지 않습니다. [mcve] – Bergi

+0

을 게시하십시오. 나는 코드를 추가했다.'funcB'가 한 번만 호출 되었기 때문에 실행되지 않는다는 것을 알 수있다. –

+0

'MyClass'는 어떻게 정의되고 인스턴스화됩니까? 'this.device.send'에 무엇이 있습니까? MyClass 정의로이 코드를 실행했는데 괜찮 았어. 'let MyClass = function() { this.device = { send : function (a, c) { c ('response'); } } }'괜찮습니까? CB! ' – barnski

답변

0

문제점을 발견했습니다.

this.device.send()은 주어진 콜백을 호출하지 않지만 이전 호출에서 주어진 콜백을 호출합니다. 문서화되지 않았으므로 구현을 찾으려면 3 층으로 내려 가야했습니다 ...

그래서 해결책은 funcB()을 호출하고 원하는 콜백이 호출 될 때까지 호출하는 것입니다.

+0

체크 표시를 클릭하여이 답변을 수락 답변으로 표시하십시오. 그러면이 질문이 완료되었음을 알 수 있습니다. – jfriend00

+0

@ jfriend00 나 자신의 대답을 받아 들일 수 있기까지 아직도 나는 23 시간을 기다려야한다. –