2014-12-12 7 views
0

에 인수를 전달하는 내가 사용하고 약속 :어떻게 약속

var restClient = { 
    serveRequest: function(rUrl, type, body, rHeaders, rAsync, callback) { 
     var promise = jQuery.ajax({ 
      url: rUrl, 
      type: type, 
      data: body, 
      headers: rHeaders, 
      async: rAsync, 
      contentType: "text/plain", 
      dataType: "json" 
     }); 

     promise.then(onSuccess, onError); 
    }, 
    onSuccess: function(data) { 
     callback(data); 
    }, 
    onError: function(msg) { 
     console.log(msg.responseText); 
    } 
} 

어떻게 promise.then는 onSuccess에 인수 (콜백)를 통과 할 수 있습니까? 나중에 onSuccess 메서드에서 사용하고 싶습니다.

답변

6

당신은, 우선,이

음과 같은 약속을 안 사용하고 있습니다. 약속의 목적은 비동기 함수의 결과로 반환되므로 더 이상 콜백 매개 변수가 필요하지 않습니다. 당신은

var restClient = { 
    serveRequest: function(rUrl, type, body, rHeaders, rAsync) { 
     var promise = jQuery.ajax({ 
      url: rUrl, 
      type: type, 
      data: body, 
      headers: rHeaders, 
      async: rAsync, 
      contentType: "text/plain", 
      dataType: "json" 
     }); 
     return promise; 
    } 
}; 

을하고 restClient.serveRequest(…)의 호출자가 .then(…)를 호출 할 수 있도록 더 나은 것입니다.

어떻게 promise.then onSuccess에서 인수 (콜백)를 전달할 수 있습니까?

onSuccess은 필요하지 않습니다. 그냥 직접 나중에는 onSuccess 방법이 사용하려는

promise.then(callback, function(msg) { 
    console.log(msg.responseText); 
}); 

사용합니다.

수 없습니다. callback을 사용하려고 시도하지만 이는 serveRequest 메소드의 로컬 매개 변수입니다. 따라서 onSuccess은 기껏해야 로컬 함수 일 수 있지만 그 자체의 메소드는 될 수 없습니다.

+0

콜백없이 약속을 사용하는 방법을 알고 싶습니다. 나는 이것이 당신이 진정으로 의미했던 것이라고 생각하지 않습니다. – jfriend00

+0

@ jfriend00 : 수정되었습니다. 나는'then'을 제외한 어떤 함수 나 메소드도 콜백 매개 변수를 필요로하지 않는다는 것을 의미했습니다. – Bergi