2016-09-27 1 views
0

안녕하세요의 일부에 약속을 해결하기 위해 선택할 수 있습니다 anotherFunction가 트리거로 이동됩니다는 나는이 같은 설계 모듈의 기능을 가지고</p> <p>만 if 문

myFunction: function(some args, myBoolean) { 
    var deffered = q.defer() 
    if(myBool) { 
    module.exports.mySecondfunction(args, false, null) 
    } else { 
    return module.exports.mySecondfunction(args, true, deffered) 
}, 

mySecondFunction: function(some args, myBoolean, myPromise) { 
    //Some work here 
    if(myBoolean) { 
    //Some work 
    promise.resolve(); 
    return myPromise.promise 
    } 
} 

anotherFunction: function(some args) { 
    //some work 
    if (something) { 
    myFunction(some args, true) 
    } else { 
    myFunction(some args, false).then((data) => { 
     //do stuff 
    } 
    } 
} 

실패

TypeError: Cannot read property 'then' of undefined

라인은 다음과 같습니다 :

,691 "다른"부분은 내 서버에서 오류가 발생합니다

myFunction(some args, false).then((data) => {...

내 코드에 어떤 문제가 있는지 알고 계십니까? 부울이 True로 설정된 경우에만 함수를 약속 했습니까?

+0

지연을 거의 전달해서는 안됩니다. 'mySecondFunction'을 반환하고 싶다면 자신의 약속을 만드십시오. – Bergi

+0

예, 때로는 약속을하고 때로는 돌려주지 않는 것이 좋습니다. 비동기적인 작업을 수행하지 않는 지사에 있다면 이미 완수 된 약속을 반환하십시오. – Bergi

답변

0

두 기능 모두에 대한 약속을 반환해야합니다. 이 경우

anotherFunction: function(some args, myBoolean, myPromise) { 
    //some work 
    if (something) { 
    myFunction(some args, true) 
    } else { 
    myFunction(some args, false).then((data) => { 
     //do stuff 
    } 
    } 
    myPromise.resolve(); 
    return myPromise.promise; 
} 

약속 혹시 진정한 비동기로 anotherFunction을 변경해야하는 경우 당신을 위해 쉽게 할 것이다 추상적 인 비동기/동기 방법의 변화에 ​​제공 : 같은 것을 사용할 수있다.

나는 약속을 내 보내야한다고 생각하지 않는다. myFunction과 같은 약속을 반환 할 때 함수를 내 보낸다면 코드를 더 재사용 할 수있다.

0

항상 약속을 해결해야합니다.

난 그냥 async/await 구문을 사용하는 것이 좋습니다. 현재이 경우 babel이 필요합니다.

async function takesAwhile(otherFirst) { 
    if (otherFirst) await doOtherThing(); 
    return doStuff();  
} 
+0

'return' 문에서 'await'은 중복되는 것 같습니다. – zerkms

+0

나는 doStuff도 비동기 였다고 생각했습니다. 어느 쪽이든 될 수 있습니다. –

+0

비동기인지 여부는 중요하지 않습니다. 'return await'은'return'과 구별되지 않습니다. 추신 : 나는 당신의 프로필에 "about"을 정말 좋아합니다! :-D – zerkms