Http请求无法在后台模式下工作

时间:2017-06-20 17:09:52

标签: ionic-framework ionic2 backgroundworker background-process

我为Reddit写了一个http请求,但没有在app组件上工作 我在其他页面上复制代码并且工作正常但是在应用程序组件上没有工作Http请求(以及我的私有服务)

import { Http, Response,Request } from '@angular/http';
import 'rxjs';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';





constructor(public http: Http,public agornaApi:AgornaApi ,private backgroundMode: BackgroundMode ,public localNotifications: LocalNotifications,platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, public storage: Storage,public authService: Auth) {


localNotifications.on("click", (notification, state) => {
this.nav.push(ListmessagesPage);
        });
document.addEventListener('deviceready', function () {  
    // Android customization
    // To indicate that the app is executing tasks in background and being paused would disrupt the user.
    // The plug-in has to create a notification while in background - like a download progress bar.
    cordova.plugins.backgroundMode.setDefaults({ 
        title:  'بارگزاری',
        text:   ''
    });
    // Enable background mode
    cordova.plugins.backgroundMode.enable();

    // Called when background mode has been activated
    cordova.plugins.backgroundMode.onactivate = function () {


          setInterval(function () {






        this.http.get('https://www.reddit.com/r/gifs/new/.json?limit=10').map(res => res.json()).subscribe(data => {


   cordova.plugins.notification.local.schedule({

        text: data.kind,
        data: { secret:'key' }
    });

    });





        }, 10000);
    }
}, false);



  });



    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      statusBar.styleDefault();
          setTimeout(() => {
        splashScreen.hide();        

      }, 100);
    });
  }
```

系统信息

全球套餐:

@ionic/cli-utils : 1.0.0-rc.2
Cordova CLI      : 6.5.0
Ionic CLI        : 3.0.0-rc.2

本地包裹:

@ionic/app-scripts              : 1.3.6
@ionic/cli-plugin-cordova       : 1.0.0-rc.2
@ionic/cli-plugin-ionic-angular : 1.0.0-rc.2
Ionic Framework                 : ionic-angular 3.1.1

系统:

Node       : v7.4.0
OS         : macOS Sierra
Xcode      : Xcode 8.3.2 Build version 8E2002
ios-deploy : 1.9.1
ios-sim    : not installed

1 个答案:

答案 0 :(得分:1)

我会尝试制作一个单独的页面,我们有一个不同的控制器(用于该视图)。

首先,请尝试以下问题排查,以了解它是否实际尝试获取请求:

转到chrome-> dev-tools->网络标签:在网络标签中,验证GET请求是否由angular完成。如果您看到它,请尝试查看请求的预览部分。有时,根据您的系统,会发生跨源块。有时只是你的网址,没有找到(404)或任何其他类型的错误。

其次:如果您看到请求但没有数据,可能是您在获取数据后可能正在做某事,例如从一个页面移动到另一个页面。尝试保存此类数据或尝试在http请求中创建所有逻辑。但为什么在http请求中呢?因为http本质上是异步的,并且您可能正在执行,并且observable尚未得到响应以便做出反应。所以你可能正在进行调用,但代码逻辑正在向前推进。

我曾经尝试过在我项目的同一区域做http请求,他们总是给我带来麻烦。