2015-01-28 2 views
0

Я пытаюсь создать обещания для своего приложения. У меня есть что-то вродеКак передать параметр в функцию в моем случае

var test = function(id,companyID) { 
    return getProduct(id) 
     .then(getProductName(companyID)) 
     .then(function(obj) { 
       console.log(obj) 
     }) 
} 

test('123', '456'); 

Все, что я могу видеть, это объект, содержащий пустые контексты. Однако, если я не изменить свой код, чтобы не включать в себя параметры и жёстко в функции getProductName как

var test = function(id,companyID) { 
    return getProduct(id) 
     .then(getProductName) 
     .then(function(obj) { 
       console.log(obj) 
     }) 
} 

test('123', '456'); 

Я получил нужные мне данные в console.log

Я не знаю, как передать параметры в цепь. Есть идеи, как это сделать? Большое спасибо!

+0

Я не вижу функции 'getProductName' определенной в любом месте вашего образца кода. – Dalorzo

+0

@Dalorzo Это просто функция, которая возвращает обещание – BonJon

+0

Вы хотите передать 'companyID' или значение результата' getProduct (id) 'обещание вашей функции' getProductName'? – Bergi

ответ

1

Если вы вернули обещание от обработчика, то обещание, которое было возвращено из сопоставления .then() приспосабливается к этому обещанию, что позволит вам сделать это:

var test = function(id,companyID) { 
    return getProduct(id) 
     .then(function(){ 
      return getProductName(companyID) 
     }) 
     .then(function(productName) { 
      console.log(productName); 
     }); 

} 
1

пытались ли вы

var test = function(id,companyID) { 
    return getProduct(id) 
     .then(function(){ 
      getProductName(companyID) 
      .then(function(obj) { 
       console.log(obj); 
      }); 
     }) 
} 
+0

он работает, но может ли он быть более красивым? Я чувствую, что здесь есть много вложенных функций + 1 – BonJon

1

Вы пробовали что-то вроде этого:

var test = function(id, companyID){ 
    return getProduct(id) 
     .then(function(data){ 
      getproductName(companyID) 
       .then(function(data){ 
        console.log(obj); 
     }); 
    }); 
}; 
+0

он работает, но может ли он быть более красивым? Я чувствую, что здесь есть много вложенных функций + 1 – BonJon

+0

Это, но вы вкладываете обещания. Без рефакторинга методов getProduct и getproductName или лучшего понимания структуры вашего приложения/данных я бы сказал, что это так же красиво, как и получается :) – Cognitronic

1

Когда вы не используете getProductName(companyID) он не потому, что CompanyID не определен, так что вы должны использовать в failHandler:

var test = function(id,companyID) { 
    return getProduct(id) 
     .then(getProductName) 
     .then(function(obj) {//doneHandler 
       console.log(obj) 
     },function(obj){//failHandler 
       console.log(obj);//now this gets logged 
     }) 
} 

test('123', '456'); 
+0

Спасибо, но проблема в том, что она работает, ЕСЛИ я не передаю идентификатор компании + 1 – BonJon

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