我一直在使用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库,因此如果已经包含了处理它的内容,那就太好了。