2016-11-10 14 views
4

角度で、私はまだ2角度で観察できる学んだ、と角2変換の約束2

function promiseFunc() { 
    var deferred = $q.defer();  

    $http.post(url, something) 
    .then(function (response) { 
     if (response === 1) deferred.resolve(response.data); 
     else deferred.reject(); 
    }).catch(function (e) { 
     deferred.reject(e); 
    }); 

    return deferred.promise; 
}  

に角度1で私のコードを変換する方法を見つけ出すことができませんでしたどのように角度2でこのコードを変換することができます誰に教えてくれますか?

EDIT:

そして、何http.postはオプションであるかの?

function promiseFunc(param1) { 
    var deferred = $q.defer();  

    if (param1 === 1) { 
    deferred.resolve(1); 
    } else { 
    $http.post(url, something) 
     .then(function (response) { 
     if (response.x === 1) deferred.resolve(response); 
     else deferred.reject(); 
     }).catch(function (e) { 
     deferred.reject(e); 
     }); 
    } 

    return deferred.promise; 
} 

私が観測可能で欠けているのは、解決と拒否を呼び出す能力です。それは観察可能にすることができますか?

+0

問題のようにそれを使用するには、あなたが[繰延アンチパターン](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patternsに頼っているということです#the-deferred-anti-pattern)は、Promises/A +には固有のものではなく、オブザーバブルに直接変換することはできません。 – estus

答えて

3
someMethod() { 
    if(param === 1) { 
    return Observable.of(1); 
    } else { 
    return this.http.post(url, something) 
    .map(
     response => { 
     let data = response.json(); 
     if(data === 1) { 
     return 1; 
     } 
     throw 'some error'; 
     } 
    ); 
    } 
} 

その後、

this.someMethod().subscribe(
    data => console.log(data), 
    error => console.log(error), 
() => console.log('completed') 
);  
+0

http.postがオプションの場合はどうなりますか?私の編集をチェックできますか? – Reynaldi