首页 文章

在返回undefined之前先make return执行

提问于
浏览
1

我正在使用cordova语音识别插件(https://github.com/pbakondy/cordova-plugin-speechrecognition),该方法将返回用户所说的内容 . 但是,如果我是console.log(startSpeechRecognition()),_2515213将不会被执行,它将返回'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))
  );
}

我通过使用toPromise()尝试了另一个解决方案(Angular 2: Convert Observable to Promise),但我仍然得到相同的结果 . 任何帮助是极大的赞赏 .

2 回答

  • 1

    因为Angular异步调用subscribe方法,所以即使在订阅了observable之前,console.log(startSpeechRecognition())中的函数也将返回undefined .

    您可以在subscribe中应用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
    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))
      );
    

相关问题