2016-09-27 20 views
0

私のサービス層は、アプリケーションがオンラインのときにhttp要求を作成するのをサポートし、アプリケーションがオフラインのときに要求を保存する必要がありますアプリがオンラインのときの約束か、アプリがオフラインのときの何かの同期のいずれかである。 someServiceの実装は同期または非同期応答を持つことができるAPIを設計する方法

if (isOnline()) { 
    return http.post() 
} else { 
    cachePostForLater(); 
} 

コントローラ層から節約のオンライン/オフラインの複雑さを試してみて、非表示にするサービスから戻るための最善のことは何になりますしかし、私は現在

someService.save(data).then(function(response) { 
    performSomeAction(); 
}); 

がありますか?

答えて

2

同期関数は、手動で解決する約束を返す必要があります。そうすれば、apiサービスを呼び出しているコードは、呼び出しがオンライン中であっても行われていなくても不可能になる可能性があります。 あなたがあなたのサービスの依存関係として$qが含まれている場合は、私はあなたが `$のq.when`を意味だと思う

function save(){ 
    if (isOnline()) { 
    return http.post() 
    } else { 
    cachePostForLater(); 
    return $q.resolve(null); 
    } 
} 
+0

を行うことができます。 – vgrafe

+0

'$ q.resolve()'は直ちに解決される約束を返します。これはポスターが望むものと思われます。 'save()。then(function(){})'を実行すると 'save()'が '$ q.resolve()'を返しているときに 'then'関数が起動します。なぜ 'いつ'を使うのですか? – danyamachine

+0

ありがとう!あなたはこれのためのテストを書く方法の提案を持っていますか?モックhttpbackendを使用すると、 'オンライン'のフローは簡単ですが、 のようなものです。var ranCallback = false; annotationService.saveAnnotation(annotation、contentInfo).then(function(){ ranCallback = true; }); expect(ranCallback).toBeTruthy(); 'オフライン'のフローの場合には失敗します –

関連する問題