在Angular2中创建延迟的正确模式

时间:2016-08-01 23:53:02

标签: angular ionic2 angular-promise

我一直在使用angular1.x一段时间了,并且最近切换到了Angular2,它似乎覆盖了一些概念,主要是从承诺到可观察的。

在我的Ionic2应用程序中,我正在解析一些流数据(串行,如果重要)以匹配某些请求。我有一个方法接收所有传入的数据(作为字符串)。这是我将在angular1.x应用程序中使用的模式:

var settingsDeferred = $q.defer();
var settingsDeferred2 = $q.defer();
...
parseData(str) {
 // here I parse the string ...
 if (type of received data is 1){
   if (settingsDeferred){
     settingsDeferred.resolve(parsedData);
   }
 }else if (type of data is 2){
   if (settingsDeferred2){
     settingsDeferred2.resolve(parsedData);
   }
 }
}

requestSpecificData(){
 sendRequestCommand();
 settingsDeferred.promise.then(function(myData){
   console.log('requested data was received');
 }
}

requestSomeOtherData(){
 sendAnotherRequestCommand();
 settingsDeferred2.promise.then(function(myData2){
   console.log('requested data2 was received');
 }
}

显然,为简洁起见,这是简化的,但主要功能是相同的。由于Observables需要(AFAIK),resolve()在他们的声明中是否有任何方法可以达到这个目的?

我认为这是错误的,我是否应该使用一些CommandResponseEvent队列的解释器模式,其中上面的parseData应该将事件推入,并且侦听器应该将其特定对象拉出队列?这听起来有点矫枉过正,我还需要在事件发生之前听一个事件,然后删除听众。

我的目标是5或6个简单的请求/响应事件,但是传入流也可以同时包含其他数据。 我知道我可以导入$ q库,但也许有一种推荐的方法以'Angular 2'方式执行此操作。

我正在使用Ionic2库,因此如果已经包含了处理它的内容,那就太好了。

0 个答案:

没有答案