make return выполняется первым перед возвратом неопределенного - PullRequest
0 голосов
/ 16 мая 2018

Я использую плагин для распознавания речи Cordova (https://github.com/pbakondy/cordova-plugin-speechrecognition), метод которого возвращает то, о чем говорил пользователь. Однако если я console.log (startSpeechRecognition ()), возвращает результаты не будет выполнен, и он вернется как 'undefined'

startSpeechRecognition() {
var options = {
  language:'en-US',
  showPopup:false
};

this.speechRecognition.startListening(options) 
  .subscribe(
    (results: Array<string>) => {return results},
    (onerror: string) => (console.log("Error: "+onerror))
  );
}

Я пробовал другое решение ( Angular 2: преобразование Observable to Promise ) с помощью toPromise (), но явсе равно получите тот же результат. Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Поскольку Angular вызывает метод подписки асинхронно, функция в console.log (startSpeechRecognition ()) вернет undefined даже до того, как наблюдаемое было подписано.

Вы можете применить console.log () внутри подписки:

this.speechRecognition.startListening(options) 
.subscribe(
(results: Array<string>) => {
 console.log(results);
 return results;
 },
(onerror: string) => (console.log("Error: "+onerror))
);

или добавить метод add () после подписки:

let obj = [];
this.speechRecognition.startListening(options) 
.subscribe(
(results: Array<string>) => {
 obj = results;
 },
(onerror: string) => (console.log("Error: "+onerror))
).add(()=>
{ 
//Use your object here
 console.log(obj);
 });
0 голосов
/ 16 мая 2018
this.speechRecognition.startListening(options) 
  .subscribe(
    (results: Array<string>) => {return results},
    (onerror: string) => (console.log("Error: "+onerror))
  );

Это ничего не даст.

Попробуйте вместо этого.

this.speechRecognition.startListening(options) 
  .subscribe(
    (results: Array<string>) => {
      console.log(results);
    },
    (onerror: string) => (console.log("Error: "+onerror))
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...