2016-09-29 2 views
2

은 기본적으로promise를 사용하는 함수에서 promise를 반환하는 방법은 무엇입니까? 내가 뭘하려고 오전

function test() { 
getSomeValue().then(function (data) { 
    //process data 
}); 
} 

function getSomeValue() { 
//do some long process 
return new Promise(function (resolve, reject) { 
    resolve(result); 
}); 
} 

function getSomeOtherValue() { 
//do some long process 
return new Promise(function (resolve, reject) { 
    resolve(result); 
}); 
} 

기능 테스트는 약속을 반환하고 반환 된 데이터에 대한 몇 가지 계산을 수행하는 함수를 호출합니다. 이 부분은 잘 작동합니다. 이제 함수 getSomeValue은 약속을 반환하는 다른 함수를 호출해야합니다. getSomeValue에서 약속을 반환하는 방법은 getSomeOtherValue이 완료 될 때까지 대기합니다.

기타 필요한 정보가 있으면 알려주십시오.

+0

당신은' – Rayon

답변

1

당신은 단지 체인 수 getSomeOtherValuegetSomeValue 내부 :

function getSomeValue() { 
    //do some long process 
    return getSomeOtherValue().then(function() { 
     return new Promise(function (resolve, reject) { 
      resolve(result); 
     });   
    } 
} 

그러나, 이것은 단지 설명을위한 것입니다 :

function getSomeValue() { 
    //do some long process 
    return new Promise(function (resolve, reject) { 
     resolve(result); 
    }).then(getSomeOtherValue); 
} 

당신이 순서는 다음 전환하려면

. 더 높은 수준에서 효율적으로 체인 수 있도록 당신은 당신의 약속을 디자인 할 수 있습니다 :

function test() { 
    getSomeOtherValue() 
     .then(getSomeValue) 
     .then(function (data) { 
      //process data 
     }); 
} 
+0

실제로 getSomeOtherValue는() 전에 호출 할 필요가 ....) (다음.) 그 때는 체인 연결을, '(할 수 있습니다. getSomeOtherValue()에서 데이터가 필요하고 그에 대한 응답을 생성합니다. –

1

getSomeOtherValue 기능을 기다릴가 해결해야 할, 당신은 getSomeOtherValue에서 반환 약속 getSomeValue 함수의 약속을 해결해야 기능. 아래의 코드는 희망

function test() { 
getSomeValue().then(function (data) { 
    //process data 
}); 
} 

function getSomeValue() { 
//do some long process 
return new Promise(function (resolve, reject) { 
    getSomeOtherValue().then(function (data) { 
     resolve(result); 
    });   
}); 
} 

function getSomeOtherValue() { 
//do some long process 
return new Promise(function (resolve, reject) { 
    resolve(result); 
}); 
} 
2

, 그냥 getSomeValue에 대한 값을 처리하기 위해 다른 기능과, 먼저 체인을 getSomeOtherValue 함수를 호출 getSomeValue 전에 getSomeOtherValue에서 값을 얻기 위해, 다음 마지막으로, 호출자에게 결과를 반환 의미해야한다 (테스트 기능)

function getSomeValue() { 
    //do some long process 
    return getSomeOtherValue().then(function(resultFromSomeOtherValue) { 
    return new Promise(function (resolve, reject) { 
     var result = true; //some value after process; 
     return resolve(result); 
    }); 
    }); 
} 
+0

설명이 추가되었습니다. – alpha

관련 문제