2017-02-23 13 views
0

Я работаю с угловым2. Теперь у меня возникают проблемы с получением значения внутри subscribe(). Я знаю, что он вернет null. Как я могу вернуть правильное значение?Как получить переменные внутри функции RxJS subscribe()?

Вот мой код. Кто-нибудь даст мне совет, было бы очень полезно. Спасибо :)

this.deliveryService.deliveryCancel(rowInfo.branchId, rowInfo.id).subscribe(
 
       res => { 
 
       var data = res.json(); 
 
       this.getDeliveryList(); 
 
       this.msgs.push({ severity: 'success', summary: 'Info', detail: rowInfo.deliveryStatus }); 
 
       }, 
 
       err => { 
 
       this.errMessage = <any>err; 
 
       this.msgs.push({ severity: 'error', summary: 'Error', detail: this.errMessage }); 
 
       } 
 
      ); 
 
      
 
      console.log(data);

deliveryCancel()

deliveryCancel(branchId, deliveryId) { 
 
    const headers = new Headers({ 
 
     'Content-Type': 'application/json' 
 
    }); 
 
    return this.http.put(this.testUrl + '/admin/branches/' + branchId + '/deliveries/' + deliveryId + '/cancel', { 
 
     headers: headers 
 
    }) 
 
     .catch(handleError); 
 
    }

+0

вы можете уточнить ваш вопрос и связать его с кодом вы вывесили? – shusson

+0

Где RXJS и где подписаться метод в вашем вопросе? –

+0

@shusson, я просто редактирую свой код. Мой плохой :( –

ответ

0

Вы не можете получить доступ к res.json(), как это. И инициализируйте «данные» как переменную класса. Попробуй это.

data = {}; 

this.deliveryService.deliveryCancel(rowInfo.branchId, rowInfo.id).subscribe(
      res => { 
      this.data = res['_body']; 
      this.getDeliveryList(); 
      this.msgs.push({ severity: 'success', summary: 'Info', detail: rowInfo.deliveryStatus }); 
      }, 
      err => { 
      this.errMessage = <any>err; 
      this.msgs.push({ severity: 'error', summary: 'Error', detail: this.errMessage }); 
      } 
     ); 

     console.log(data); 
+0

Как вы думаете, результат 'console.log (data)' будет? – echonax

+0

@ raj m, Спасибо за ваш ответ. Он по-прежнему печатает нуль –

+0

console 'res' и дайте мне знать –

0

Это не угловой вопрос, а вопрос javascript об асинхронном поведении, нарушающем поток исполнения.

Подписывание означает, что при любой ошибке или успехе, возвращенной доставкойCancel(), вызывается функция res или функция err.

Ваш console.log (данные) выполняется только один раз и никогда не является частью этих функций.

Это то, что вы после:

this.deliveryService.deliveryCancel(rowInfo.branchId, rowInfo.id).subscribe(
     res => { 
     this.data = res['_body']; 
     this.getDeliveryList(); 
     this.msgs.push({ severity: 'success', summary: 'Info', detail: rowInfo.deliveryStatus }); 
console.log(data); 
     }, 
     err => { 
     this.errMessage = <any>err; 
     this.msgs.push({ severity: 'error', summary: 'Error', detail: this.errMessage }); 
console.log(data); 
     } 
    ); 
+0

Вам также необходимо позвонить в службу доставки. – Arinaud

+0

I personnaly подписаться на наблюдаемые в ngAfterViewInit – Arinaud

+0

Спасибо за ответ! Однако это не то, что я хочу знать. Я хотел знать, как использовать «данные» за пределами подписки() –

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