2016-08-11 2 views
0

약속을 사용하여 변수 값 (예 : ajax 호출의 응답)을 설정하는 방법을 생각해 냈습니다.약속을 사용하여 변수 값을 설정하는 방법

나는 예를 들어 있습니다

getVariable(id) { 
    return $.ajax({ 
    //... 
}).done(function(response) { 
    //... getVariable return response 
}).fail(function(response) { 
    //... getVariable return something_else 
}); 
    // ... 

getVariable는 아약스 (또는 다른 비동기) 응답 값 번만 수행()에 약속에서 변경해야

something.value = getVariable('id'); // { id : 'Adam Smith' } 

.

+0

약속은 비동기 코드를 동기화하지 않기 때문에 수행 할 수 없습니다. –

+0

그래, 유일한 방법은 값을 콜백으로 할당하는 것입니다. – Daniele

+0

만약 내가 무슨 뜻인지 안다면 –

답변

1

변수를 직접 설정하는 것은 불가능합니다. 작업이 비동기이기 때문에 비동기 작업의 결과를 안정적으로 사용할 수있는 곳은 .done() 또는 .then()과 같은 약속 처리기 내부입니다. 따라서 결과를 변수로 설정 한 다음 해당 변수를 다른 코드에서 사용하려고하면 일반적으로 제대로 작동하지 않습니다. 일반적으로 타이밍 문제가 발생합니다.

대신 실제로 약속 처리기 콜백 내에서 변수를 사용하는 경우 비동기 결과로 프로그래밍하는 방법을 배워야합니다. 이 코드를 저장하지 않고 다른 코드에서 사용하려고합니다.

function getVariable(id) { 
    return $.ajax({...}); 
}); 

getVariable(...).then(function(response) { 
    // process result here 
    // don't just store it somewhere and expect other code to use that stored 
    // value. Instead, you use the result here and put whatever code 
    // needs that value in here. 
}, function(err) { 
    // handle error here 
}); 
관련 문제