【问题标题】:make return execute first before returning undefined在返回 undefined 之前先执行 return
【发布时间】:2018-10-26 02:36:29
【问题描述】:

我正在使用科尔多瓦语音识别插件 (https://github.com/pbakondy/cordova-plugin-speechrecognition),该方法将返回用户所说的内容。但是,如果我 console.log(startSpeechRecognition()),return results 将不会被执行,它将返回为 '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),但我仍然得到相同的结果。非常感谢任何帮助。

【问题讨论】:

  • 执行 console.log 时,.subscribe 函数没有被调用。所以我会使用一个日志(和一个适当的回调函数来使它工作)而不是return results

标签: angular cordova typescript observable


【解决方案1】:
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))
  );

【讨论】:

    【解决方案2】:

    由于 Angular 异步调用 subscribe 方法,console.log(startSpeechRecognition()) 中的函数甚至在订阅 observable 之前就会返回 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);
     });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 2017-06-07
      • 2017-07-17
      相关资源
      最近更新 更多