从服务中的回调函数返回值到组件

时间:2017-03-07 18:02:44

标签: javascript angular callback ionic2 cordova-plugins

我正在使用我的Ionic 2移动应用中的Cordova WifiWizard Plugin。当我在页面的* .ts文件中运行它时,一切正常。在这种情况下,我的代码如下:

在@Component:

之前声明WifiWizard
declare var WifiWizard:any;

调用WifiWizard和成功/错误方法:

setCurrentWifiAsHomeWifi() {
  WifiWizard.getCurrentSSID(this.ssidSuccess, this.ssidError);    
}

ssidSuccess = (ssid) => {
   this.userService.setHomeWifi(this.user.$key, ssid);
};

ssidError = (err) => {
  console.log("WiFi Wizard Error"+err);
};

但是,我不想将所有这些wifi逻辑放在页面组件中,而是将其转移到wifi提供商/服务。但是我没有得到这个服务来将ssid-string返回给组件。

编辑:

我尝试了很多不同的东西,我仔细阅读了由gyre链接的帖子(谢谢你)。但是,我仍然无法找到问题的解决方案,我认为这与链接问题略有不同。

让我勾勒出问题的结构,让你更清楚: structure of my serviceCall

我正在从homePage.ts调用wifi服务,例如使用承诺:

setCurrentWifiAsHomeWifi() {
  this.wifiService.loadWifiData().then( result=> {
  console.log("returned SSID: "+result);
});

在wifiService.ts中,我需要实现调用wifiWizard插件的“loadWifiData”,如下所示:

WifiWizard.getCurrentSSID(this.getWifiSuccess, this.getWifiError);

如果成功,它会将SSID字符串传递给“getWifiSuccess”方法,如果失败则将错误传递给“getWifiError”。但是,插件调用不会向我的主页返回任何值。

如何将结果(SSID或错误)返回到我的主页?我被困在这里感谢您的帮助!希望现在变得更加清晰。

1 个答案:

答案 0 :(得分:0)

我通过让loadWifiData()返回Promise并直接在此Promise中定义success-和reject-函数的代码来解决它。

 loadWifiData() {
    return new Promise( (resolve, reject) => {
      WifiWizard.getCurrentSSID(
        // if successful:
        (ssid => {
          resolve (ssid);
        })
        , 
        // if error:
        (error => { 
          reject (error); 
        })
      )
    });    
  }