2014-12-12 4 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(…).

Как передать аргументы (обратный вызов) в обещании.then onSuccess?

Это не нужно onSuccess. Просто непосредственно использовать

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

Я хочу использовать это в OnSuccess методе позже.

Вы не можете. Он пытается использовать callback, но это параметр, локальный для метода serveRequest. Таким образом, onSuccess может быть локальной функцией там, но не является само по себе.

+0

Я хотел бы видеть, как вы используете обещания без обратных вызовов. Я не думаю, что это вы действительно имели в виду. – jfriend00

+0

@ jfriend00: Исправлено. Я имел в виду, что никакая функция или метод, кроме 'then', не нуждается в параметрах обратного вызова. – Bergi

Смежные вопросы